将文本文件逐行读入并行数组C++

Posted

技术标签:

【中文标题】将文本文件逐行读入并行数组C++【英文标题】:Reading text file line by line into parallel arrays C++ 【发布时间】:2013-05-06 19:39:54 【问题描述】:

无法将信息从文本文件读取到并行数组。信息在文件中是这样排列的:

Name
Street Address
City, State, Zip
Order size

Name
Street Address
City, State, Zip
Order size

基本上,我需要将名称、街道地址和城市/州/邮编作为行拉入字符串数组,然后将订单大小拉入 int 数组进行一些计算。总共4个阵列。

问题是它会很好地读取第一个订单,但第二个订单看起来不同,输入和之后的所有订单都显示为数字:

John Doe
123 Main Street
City, State Zipcode

John Doe
123
 Main Street
City, State Zipcode
9
0
9
9
4679937
9
0
9
9
4710208

下面是相关代码:

    const int ORDERS = 10;
    cout << "Reading from file..." << endl;
ifstream inputFile;

string name[ORDERS], streetAddress[ORDERS], cityStateZip[ORDERS];
string line;
int orderSize[ORDERS];

inputFile.open("Orders.txt");
for(int i = 0; i < ORDERS; i++)
   
    getline(inputFile, line);
    name[i] = line;
    getline(inputFile, line);
    streetAddress[i] = line;
    getline(inputFile, line);
    cityStateZip[i] = line;
    inputFile >> orderSize[i];  


inputFile.close();

for(int i = 0; i < ORDERS; i++)

    cout << name [i] << endl;
    cout << streetAddress[i] << endl;
    cout << cityStateZip[i] << endl;
    cout << orderSize [i] << endl;

有什么想法吗?似乎它试图在第一个订单或其他东西之后将字符串读取为整数。

【问题讨论】:

格式化提取运算符 (&gt;&gt;) 跳过空白行。 getline 没有。 您可能还想定期检查流故障,以帮助调试。 您描述了一种文件格式,其中每条记录占用五行(四加一空白)。然而,您编写的代码只读取每条记录的三行。有问题。 【参考方案1】:

>> 提取运算符将行尾的 \n 留在输入流中。因此,下一个 getline 不会读取您想要的行,而只会读取订单行的尾随 \n。要么只使用 getline 并在事后从该行中提取 int,要么确保在提取后跳过该行的其余部分。

此外,Ben Voigt 和 john 所说的话。

【讨论】:

只是为了确保我正确地解决了这个问题,我最好使用 getline 5x(4 个数据,一个空白),然后将字符串转换为 int 和将其分配给适当的数组? 是的,这就是我的建议。

以上是关于将文本文件逐行读入并行数组C++的主要内容,如果未能解决你的问题,请参考以下文章

如何将文件逐行读入node.js中的数组[重复]

c++ 将文本文件中的 3 列读入 2D 数组或 3 个单独的数组

比较从文本文件中读取的并行数组

使用 Ruby 逐行读取、编辑和写入文本文件

在 C++ 中将某种结构化的文本文件读入数组

C++文件读写操作逐字符读取文本和逐行读取文本