从冒号分隔的.text文件,C ++中提取信息

时间:2014-09-03 07:53:41

标签: c++ string fstream

人。我正在编写这个小测试程序,将“EXAMPLE.txt”中的文本文件读入我的主程序。在输出中,我输出“*”来显示输出期间的数据是我想要将其提取出来并定位到数组中的数据。假设在这个测试程序中,我想要提取的数据是“ JY9757AC ”,“ AZ9107AC ”,“ GY9Z970C ”。但在那之后,我进行了一次试运行,当遇到输出时我遇到了这个问题。

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循环中的内容?提前感谢您帮助解决我的代码!

3 个答案:

答案 0 :(得分:1)

delim的{​​{1}}参数替换了新行的默认分隔符,即&#34; \ n&#34;。 您目前正在以&#34;线&#34;是:

getline

你能做的更像是这样(如果你的输出像GY9Z970C那样)是固定大小的:

ABC
JY9757AC\nHDMI
AZ9107AC\nSNOC
GY9Z970C

答案 1 :(得分:0)

首先,我假设while循环是while(!readExample.eof()),否则根本就没有输出。

其次,对于您的问题,第一个getline(readExample,output,':');将“ABC”读入output,因此在下一行输出* ABC,这正是您所获得的。毫不奇怪。

答案 2 :(得分:0)

输出存储Example.txt中的第一个提取并打印后跟*。在第二次迭代output = "ABC";中的第一次迭代output = "JY9757AC";中。我在while循环中添加了一个getline(),用于读取行中不需要的部分。我还添加了一个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;
}