如何读取文本文件(* .txt)中两个特定单词之间的行?

时间:2019-04-07 07:05:05

标签: c++

  

1。容器ID.txt

     

容器类型:Refrigerated_Explosive //输入一个序列号每行

     

1990

     

1991

     

1992

     

END RE

这是我的c ++程序输入文件。 我的目的是读取包含“ Refrigerated_Explosive”和“ RE”的行之间的所有行(在这种情况下,我想读取数字1990、1991、1992)

到目前为止,我已经尝试使用“ while(file1 >> value >> type)”将每行中的第二个单词存储到字符串变量中,并将其与“ Refrigerated_Explosive”进行比较,如果两者相等,则移至下一行并读取内容(并存储在其他文件中),直到第二个单词为“ RE”为止。

#include<iostream>
#include<conio.h>
#include<string>
#include<fstream>
using namespace std;
int main()
{
    ifstream file1;
    ofstream file2;
    int value;
    string type;
    file1.open("1.Container ID.txt"); //Input File
    if(file1)
    {
        file2.open("1.CID.txt"); //Output File
        while(file1>>value>>type)
        {
            if(type == "Refrigerated_Explosive") //If equal read from next line
            {
                while(file1>>value>>type)
                {
                    if(type != "RE") //Read until 'RE' not found
                        file2<<value<<endl;                 
                }
            }
        }
    }
    else
    cout<<"Source File not Found1!!!\n";
    file1.close();
    file2.close();
    return 0;
}

1 个答案:

答案 0 :(得分:0)

您可以使用getline()函数读取一行,如果getline()遇到换行符\n,则会停止读取。

#include<iostream>
#include<conio.h>
#include<string>
#include<fstream>
using namespace std;
int main()
{
    ifstream file1;
    ofstream file2;


    file1.open("input.txt"); //Input File
    file2.open("output.txt"); //output file

    string line;
    while(getline(file1,line))
    {
        //if the line contains "Refrigerated_Explosive" then read number until meet RE
        if(contains(line,"Refrigerated_Explosive"))
        {
            string number;
            while(getline(file1,number))  //read number and write to file output 
            {
                if(number!="RE")
                {
                    file2<<number<<"\n";
                }
                else return 0; //break if meet "RE"
            }
        }
    }

    file1.close();
    file2.close();
    return 0;
}