Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Файл не читается построчно


Автор: worsvch 13.4.2012, 16:06
Есть файл неизвестного размера, из него нужно читая построчно выдрать то что находится в тэгах, вместо этого, читается только 1-ая строчка.
Подскажите, как быть?

Код

#include "stdafx.h"
#include <clocale>
#include <cstring>
#include <iostream>
#include <fstream>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL,"");

    bool tag = false;
    char buffer[2000];
    char buffer2[2000];
    unsigned int x = 0;
    unsigned int y = 0;
    
    ifstream file;
    file.open("c:\\test.xml",ios::in);

    while (!file.eof()) {
        file.getline(buffer,strlen(buffer),'\n');
        for (x = 0;x < strlen(buffer)+1;x++) {
            if (buffer[x] == '<') { buffer2[y] = buffer[x]; y++; tag = true; }
            else if (buffer[x] == '>') { buffer2[y] = buffer[x]; y++; tag = false; buffer2[y] = '\0'; }
            else if (tag == true) { buffer2[y] = buffer[x]; y++; }            
        }
        cout << buffer2 << endl;        
        memset(buffer2,0,sizeof(buffer2));
        memset(buffer,0,sizeof(buffer));
        y = 0;
    }

    file.close();

    return 0;
}



Автор: LOPUH 13.4.2012, 17:27
Осмелюсь предположить,что в конце строчки  у вас как то затесался EOF... Как вариант-может быть попробовать  в try..  cath, после того, как встретили EOF, прочитать следующую строчку?

Автор: Qu1nt 13.4.2012, 17:51
std::getline.

Автор: bsa 13.4.2012, 23:06
worsvch, и вместо char buffer[...]; используй std::string buffer; Вместе с std::getline будет удобней использовать, так как не придется делать всякие memset(...)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)