gpt4 book ai didi

c++ - 从 .txt 文件中读取多行作为字符串删除空格并创建新文件以进行输出

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:20:48 29 4
gpt4 key购买 nike

我正在尝试编写一个从 .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) 将不再为真,因此顶部的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;
}

关于c++ - 从 .txt 文件中读取多行作为字符串删除空格并创建新文件以进行输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50818681/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com