簡體   English   中英

從.txt文件讀取多行作為字符串刪除空格並為輸出創建新文件

[英]reading multiple lines from .txt file as string removing white spaces and creating new file for output

我正在嘗試編寫一個從.txt文件中讀取信息的程序,刪除單詞/部分之間不需要的空格,並將結果保存到新的輸出.txt文件中。

在查看了網站上的大量問題以獲得一些指導后,我已經成功完成了大部分工作。 目前我從.txt文件中讀取代碼並寫入新文件,我還設法讓它刪除不需要的空格。 但是現在我已經設法讓這個部分運行它只會讀取原始.txt文件中的一行並停在那里。 它現在也正在寫入輸出文件,它抓取每行的每個版本。

這是我到目前為止編寫的代碼,任何部分的建議都會感激,因為我還在學習。

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

// Declarations
string Inputfile, Outputfile;
ifstream OriginalInputFile("Sample of input file.txt");
ofstream NewOutputFile("Output File.txt");
ifstream OutputFileRead("Output File.txt");

int main()
{
    if (!OriginalInputFile.is_open()) { 
        cout << "Input file could not be opened! Terminating!" << endl;
        return 1;
    }
    if (OriginalInputFile.is_open())
    {
        NewOutputFile << "                         EXCEPTIONS REPORT                    " << endl;
        NewOutputFile << "                       PP TO FS OO INTERFACE                  " << endl;
        NewOutputFile << "     =========================================================" << endl;

        while ( getline (OriginalInputFile,Inputfile) )
            while(true)
            {
                unsigned int pos = Inputfile.find("  ");
                if(pos == string::npos)
                {
                    break;
                }
                else 
                {
                    Inputfile.erase(pos, 1);
                }
                {
                    Outputfile = Inputfile;
                    NewOutputFile << Outputfile << endl;
                    OriginalInputFile.close();
                }
            }
    }

    if (!NewOutputFile.is_open()) { 
        cout << "Output file could not be opened! Terminating!" << endl;
        return 1;
    }
    if (NewOutputFile.is_open()) 
    {
        while ( getline (OutputFileRead, Outputfile))
        {
            cout << Outputfile << endl;
        }
        {
            NewOutputFile.close();
        }
    }
    return 0;
}

以下是輸入數據的示例:

BABROUB00008         PERSON1             MARTIN                        M               0610196129081978D B09          PM           Brough         B010           B00008    sfsf.testmailbox@mysite.com                                       54289                                                      
BABROUB00012         PERSON2             TIMOTHY                       T               1708196407091981D B08          PP           Brough         B306           B00012    sfsf.testmailbox@mysite.com   

                                53899 

以下是輸出的一小部分示例,以顯示現在發生的情況:

BABROUB00008 PERSON1 MARTIN M 0610196129081978D B09 PM Brough B010 B00008 sfsf.testmailbox@mysite.com          54289                                                      
BABROUB00008 PERSON1 MARTIN M 0610196129081978D B09 PM Brough B010 B00008 sfsf.testmailbox@mysite.com         54289                                                      
BABROUB00008 PERSON1 MARTIN M 0610196129081978D B09 PM Brough B010 B00008 sfsf.testmailbox@mysite.com        54289                                                      
BABROUB00008 PERSON1 MARTIN M 0610196129081978D B09 PM Brough B010 B00008 sfsf.testmailbox@mysite.com       54289                                                      
BABROUB00008 PERSON1 MARTIN M 0610196129081978D B09 PM Brough B010 B00008 sfsf.testmailbox@mysite.com      54289                                                      
BABROUB00008 PERSON1 MARTIN M 0610196129081978D B09 PM Brough B010 B00008 sfsf.testmailbox@mysite.com     54289                                                      
BABROUB00008 PERSON1 MARTIN M 0610196129081978D B09 PM Brough B010 B00008 sfsf.testmailbox@mysite.com    54289                                                      
BABROUB00008 PERSON1 MARTIN M 0610196129081978D B09 PM Brough B010 B00008 sfsf.testmailbox@mysite.com   54289                                                      
BABROUB00008 PERSON1 MARTIN M 0610196129081978D B09 PM Brough B010 B00008 sfsf.testmailbox@mysite.com  54289                                                      
BABROUB00008 PERSON1 MARTIN M 0610196129081978D B09 PM Brough B010 B00008 sfsf.testmailbox@mysite.com 54289               

在可能的情況下,我希望將沒有空格的行放在輸出中,而不會看到所有工作。 然后對於當前未處理的原始輸入的下一行相同。 並且這必須運行原始.txt文件的許多行,每次都可以更改。

在將每一行寫入輸出文件后,您正在調用OriginalInputFile.close() 因此,在文件關閉之前只讀取輸入文件的第一行(之后, getline(OriginalInputFile,Inputfile)將不會為true,因此頂部while循環在單次迭代后退出。

這是一個未經測試的編輯,應該有希望工作:

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

// Declarations
string Inputfile, Outputfile;
ifstream OriginalInputFile("Sample of input file.txt");
ofstream NewOutputFile("Output File.txt");
ifstream OutputFileRead("Output File.txt");

int main()
{
    if (!OriginalInputFile.is_open()) { 
        cout << "Input file could not be opened! Terminating!" << endl;
        return 1;
    }
    if (!NewOutputFile.is_open()) { 
        cout << "Output file could not be opened! Terminating!" << endl;
        return 1;
    }

    NewOutputFile << "                         EXCEPTIONS REPORT                    " << endl;
    NewOutputFile << "                       PP TO FS OO INTERFACE                  " << endl;
    NewOutputFile << "     =========================================================" << endl;

    while ( getline (OriginalInputFile,Inputfile) )
    {
        for(unsigned int pos=Inputfile.find("  "); pos!=string::npos; pos=Inputfile.find("  "))
        {
            Inputfile.erase(pos, 1);
        }
        Outputfile = Inputfile;
        NewOutputFile << Outputfile << endl;
    }
    OriginalInputFile.close();

    while ( getline (OutputFileRead, Outputfile))
    {
        cout << Outputfile << endl;
    }
    NewOutputFile.close();
    return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM