Пишу типа - парсер
От: ginger Россия  
Дата: 29.04.04 18:13
Оценка:
Мне надо из файла, все что находится между тегами <Title type="string"> и </Title>, ну допустим вывести на экран. Поидейно, конструкция должна работать, он находит iPosBegin, корректно, так же находит iPosEnd, тоже корректно, т.е. если из первого вычесть второе — это нам и надо, ну, не суть, Вся проблема в том, что я немного не понимаю, почему когда дело доходит до
tString.assign(sTemplate,iPosBegin+21,iPosEnd);
Он начало вырезает правильно в перменную tString, но на этом не оставнавливается а загоняет туда все что остается?
Помогите, плиз!
Вот код, творчески порезанный:


#include <string>
#include <iostream>
#include <fstream>
#include <stdexcept>

int main(int argc, char* argv[])
{
  using std::string;
  std::ifstream ifs;
  ifs.open("31621.xml", std::ios::in);
  if (!ifs) { throw std::logic_error("Cannot open template."); }
  unsigned int iPosBegin, iPosEnd;
  char szBuffer[65537];
  string sTemplate;
  while (!ifs.eof())
  {
    ifs.getline(szBuffer, 65536);
    sTemplate += szBuffer;
    sTemplate += '\n';
  }
  string tString;

      sTemplate.begin();
      iPosBegin = sTemplate.find("<Title type=\"string\">");
      if (iPosBegin != string::npos)
      {
        iPosEnd = sTemplate.find("</Title>");
        if (iPosEnd != string::npos)
        {
          tString.assign(sTemplate,iPosBegin+21,iPosEnd);
          std::cout << tString << std::endl;
        }
        else
        {
          std::cout << "Broken news! " << iPosBegin << " " << iPosEnd << std::endl;
          return -1;
        }
      }
  return 0;
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.