2014-09-07 4 views
-1

Ok так, чтобы начать, потому что люди хотели бы знать, что это домашнее задание ....с ++ в то время как петли, используя функцию GetLine

Я пишу C++ программу, чтобы преобразовать текстовый файл в формате XML (это не там, где я нужна помощь) У меня проблема.

Я пишу цикл while, чтобы перебирать компании в txt-файле (до 15), а в конце каждой группы помечены словами --END_MANAGER_DATA--. Я пытаюсь написать цикл while, который будет прокручиваться по циклу компании и заканчивать цикл, когда он достигнет --END_MANAGER_DATA--. Ниже приведен пример текстового файла

19936 WALKER KOLTON PORTLAND TN 
HARMAN INTERNATIONAL INDUSTRIES INC 
LUCENT TECHNOLOGIES INC 
COMPUTER SCIENCES CORP 
COMMUNICATIONS CORPORATION 
--END_MANAGER_DATA-- 

это код, который я пытаюсь использовать .....

getline(inFile,company); 
inFile.ignore(); 
while(company != "--END_MANAGER_DATA--"|| !inFile.eof()) 
{ 
    outputfile <<"\t\t\t <company> "<<company << "</company>"<<endl; 
    getline(inFile,company); 
    inFile.ignore(); 
} 

это не работает .... это только остается в цикле .... может кто-то предложить совет относительно маршрута, который я могу взять. Я не прошу вас, чтобы закончить мою домашнюю работу .... просто нужно подтолкнуть в правильном направлении

+0

это не было должным образом .... – Jeremy

+0

пытался исправить содержимое файла, это то, что вы делали? –

+0

Я только что исправил это ... первое, как информация о сотруднике ... Я получаю это, чтобы отправить в выходной файл правильно в формате xml. остальные строки являются именами каждой компании .... – Jeremy

ответ

0

Попробуйте это:

string company = ""; 
while(company.compare("--END_MANAGER_DATA--") != 0 && !inFile.eof()) { 
    getline(inFile, company); 
    outFile << "\t\t\t <company> "<< company << "</company>" << endl; 
    inFile.ignore(); 
} 
+0

lol говорил в ближайшее время. Петля закончилась на eof ... но все же написала прошлый конец данных менеджера – Jeremy

+0

, это не работало из-за inFile.ignore(); он игнорировал первый - из данных конечного менеджера .... СПАСИБО !!! – Jeremy

2

идиоматическим способ чтения данных это поместить readline() в то время а именно:

std::string line; 

while(std::getline(inFile, line) && line != "--END_MANAGER_DATA--") 
{ 
    std::cout << "\t\t\t<company>" << line << "</company>" << '\n'; 
} 

Это работает, потому что время будет продолжаться только в том случае, если не было ошибок при чтении строки. Тестирование для eof() не работает, потому что eof() не происходит до тех пор, пока чтение не состоится, и чтение будет выполнено только в том случае, если условие ошибки уже не существует.

В вашем коде вы ignore() первый символ каждой строки, поэтому, я думаю, вы никогда не сможете сопоставить «--END_MANAGER_DATA--».

+0

Спасибо, да, функция игнорирования была в чем проблема. – Jeremy