2014-09-03 3 views
0

ребята. Я пишу эту небольшую тестовую программу для чтения текстового файла из «EXAMPLE.txt» в мою основную программу. На выходе я помещал «*» для отображения данных во время вывода данных, которые я хочу извлечь из него и найти в массиве. Скажем, в этой тестовой программе данные, которые я хотел извлечь, это «JY9757AC», «AZ9107AC», «GY9Z970C». Но после этого я попытался запустить, и я столкнулся с этой проблемой, когда пришел к выводу.Извлечение информации из обособленного файла .txt, C++

example.txt

ABC:JY9757AC 
HDMI:AZ9107AC 
SNOC:GY9Z970C 

main.cpp

main() 
{ 
    string output; 
    ifstream readExample; 
    readExample.open("EXAMPLE.txt"); 

    while(readExample.eof()) 
    { 
     getline(readExample,output,':'); 
     cout << "* " << output <<endl; 
    } 
} 

ВЫВОД

* ABC  //while loop output the "ABC", which is the data that I don't want. 
* JY9757AC 
HDMI  //it work's well, as what I expected and so and the SNOC below 
* AZ9107AC 
SNOC 
* GY9Z970C 

Я не имею ни малейшего представления, почему это "* ABC" показан на выход, что-то не так с моей логикой. или я пропустил что-то внутри цикла while? Заранее благодарю за помощь в решении моего кода!

ответ

0

Выходные магазины первое извлечение из примера.txt и печать, за которой следует *. На первой итерации output = "ABC"; на второй итерации output = "JY9757AC";. Я добавил getline() в цикле while, который читает нежелательную часть строки. Я также добавил string[] для хранения извлеченных значений.

#include <fstream> 
#include <string> 


using namespace std; 

int main() 
{ 
    string output, notWanted, stringArray[3]; 
    int i = 0; 
    ifstream readExample; 
    readExample.open("EXAMPLE.txt"); 

    while (!readExample.eof()) 
    { 
     getline(readExample, notWanted, ':'); 
     getline(readExample, output); 
     cout << "* " << output << endl; 
     stringArray[i++] = output; 
    } 
    cin.get(); 

    return 0; 
} 
+0

Привет, Робин, внедрил свой код в мою программу. Выход программ создает дополнительную строку «GY9Z970C». – J4X

+0

Thats странно, это не делает для меня. Вы уверены, что это то же самое? – robbannn

+0

Да, я скопирую исходный код, вставьте его и снова запустите. Все такой же. (Чувствую себя таким странным! Haha) – J4X

0

Во-первых, я предполагаю, что петля while равна while(!readExample.eof()), иначе выход не должен быть вообще.

Во-вторых, на ваш вопрос, первый getline(readExample,output,':'); читать «ABC» в output, поэтому в следующей строке выводит * ABC, что это именно то, что вы получили. Не удивительно.

1

Параметр delim для getline заменяет разделитель по умолчанию для новой строки, которая является «\ n». Что вы сейчас получаете, как «линия» является:

ABC 
JY9757AC\nHDMI 
AZ9107AC\nSNOC 
GY9Z970C 

Что вы можете сделать, это еще что-то вроде этого (если ваш выход как GY9Z970C) имеет фиксированный размер:

ssize_t len = getline(readExample,output,':'); 
cout << "* " << (char*)(output + (len - 8)) <<endl; 
+0

Спасибо, что работает. – J4X