如何读取包含大小未知的整数列表的文件
How to read file containing a list of integers with an unknown size
我想从一个包含 4 个整数的未知列表的文件中读取。所以文件的每一行都包含这样的内容12.0 43.0 19.0 77.0" 我想过使用二维数组,但我不知道文件的大小,因为它非常大文件。我最终将每一行作为一个字符串读取并使用 "while(!in_file.eof())" 这样我就可以到达文件的末尾,但问题是,我需要从每一行中单独获取数字。
您不需要知道文件中有多少行或每行有多少个数字。
使用std::vector> 来存储数据。
如果在每一行中,整数用 space 分隔,则可以迭代一串整数并将它们一个一个地添加到向量中:
#include <iostream>
#include <string>
#include <stream>
#include <vector>
using namespace std;
int main()
{
string textLine = "";
ifstream MyReadFile("filename.txt");
vector<vector<int>> main_vec;
// Use a while loop together with the getline() function to read the file line by line
while (getline(MyReadFile, textLine)) {
vector<int> temp_vec; // Holdes the numbers in a signle line
int number = 0;
for (int i = 0, SIZE = textLine.size(); i < SIZE; i++) {
if (isdigit(textLine[i])) {
number = number * 10 + (textLine[i] - '0');
}
else { // It's a space character. One number was found:
temp_vec.push_back(number);
number = 0; // reset for the next number
}
}
temp_vec.push_back(number); // Also add the last number of this line.
main_vec.push_back(temp_vec);
}
MyReadFile.close();
// Print Result:
for (const auto& line_iterator : main_vec) {
for (const auto& number_iterator : line_iterator) {
cout << number_iterator << " ";
}
cout << endl;
}
}
提示:此代码仅适用于整数。对于浮点数,您可以轻松识别每行中 space 的索引,获取 textLine 的子字符串,然后将此子字符串转换为浮点数 .
我想从一个包含 4 个整数的未知列表的文件中读取。所以文件的每一行都包含这样的内容12.0 43.0 19.0 77.0" 我想过使用二维数组,但我不知道文件的大小,因为它非常大文件。我最终将每一行作为一个字符串读取并使用 "while(!in_file.eof())" 这样我就可以到达文件的末尾,但问题是,我需要从每一行中单独获取数字。
您不需要知道文件中有多少行或每行有多少个数字。
使用std::vector
#include <iostream>
#include <string>
#include <stream>
#include <vector>
using namespace std;
int main()
{
string textLine = "";
ifstream MyReadFile("filename.txt");
vector<vector<int>> main_vec;
// Use a while loop together with the getline() function to read the file line by line
while (getline(MyReadFile, textLine)) {
vector<int> temp_vec; // Holdes the numbers in a signle line
int number = 0;
for (int i = 0, SIZE = textLine.size(); i < SIZE; i++) {
if (isdigit(textLine[i])) {
number = number * 10 + (textLine[i] - '0');
}
else { // It's a space character. One number was found:
temp_vec.push_back(number);
number = 0; // reset for the next number
}
}
temp_vec.push_back(number); // Also add the last number of this line.
main_vec.push_back(temp_vec);
}
MyReadFile.close();
// Print Result:
for (const auto& line_iterator : main_vec) {
for (const auto& number_iterator : line_iterator) {
cout << number_iterator << " ";
}
cout << endl;
}
}
提示:此代码仅适用于整数。对于浮点数,您可以轻松识别每行中 space 的索引,获取 textLine 的子字符串,然后将此子字符串转换为浮点数 .