gpt4 book ai didi

c++ - 从 C++ 中的文本文件中获取格式化的内容

转载 作者:行者123 更新时间:2023-11-30 04:50:02 25 4
gpt4 key购买 nike

我有以下功能以下列方式保存在文本文件中,内容具有特定格式:

#include <fstream>   
#include <iostream>
#include <iomanip>

int main ()
{
using namespace std;

fstream fs;
string str1 = string("1");
string str2 = string("12");
string str3 = string("123");
string str4 = string("1234");

fs.open ("text.txt", std::fstream::in | std::fstream::out | std::fstream::app);

fs << left << setfill(' ')
<< setw(10) << str1 << " | "
<< setw(10) << str2 << " | "
<< setw(10) << str3 << " | "
<< setw(10) << str4 << '\n';

fs.close();

return 0;
}

执行以下程序后,文件中会出现以下文本:

POS = 0123456789012345678901234567890123456789
TXT = 1 | 12 | 123 | 1234 |

这个函数读取文件的内容:

#include<iostream>
#include<fstream>

using namespace std;

int main() {

ifstream myReadFile;
myReadFile.open("text.txt");
char output[100];
if (myReadFile.is_open()) {
while (!myReadFile.eof()) {
myReadFile >> output;
}
cout<<output;
}
myReadFile.close();
return 0;
}

问题是,当我显示 output 变量的内容时,它丢失了它在文本中的格式,它看起来像这样:

POS = 0123456789012345678901234567890123456789
TXT = 1|12|123|1234|

如何获取文件中的文本格式?

最佳答案

while(file) 循环只在循环内进行一次读取是唯一可接受的用例。但是 while (!file.eof()) 后面跟着格式化的提取器操作符或者如果在读取操作之后有任何处理时总是错误的。因此,坚持一个好的旧无限循环,并在每次读取操作后进行测试。

如果您想保留输入行中的空格,例如处理固定大小的字段文件,恕我直言,最简单的方法是使用 std::getline 读取整行:

#include <string>
...
string output;
if (myReadFile.is_open()) {
for(;;) {
getline(myReadFile, output);
if (!myReadFile) break
cout << output << "\n";
}
myReadFile.close();
}

但实际上单个 getline 是通用读取循环规则的一个异常(exception),使用起来会更惯用:

        while (getline(myReadFile, output)) {
cout << output << "\n";
}

关于c++ - 从 C++ 中的文本文件中获取格式化的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55156381/

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