我有一个.txt文件,我试图从中收集数据,然后可以在我的代码中的变量中使用,以便在其他函数中使用。
以下是我的文字文件示例:
0 10 a namez 1 0
0 11 b namea 1 1
1 12 c nameb 1 1
2 13 d namec 0 1
3 14 e named 1 1
所以我的文件不会总是相同的行数,但每行的变量总是相同。
我目前有这个,首先获取文件的长度,然后更改数组中的行数:
int FileLength()
{
int linecount = 0;
string line;
ifstream WorkingFile("file.txt");
while(getline(WorkingFile, line))
{
++linecount;
}
return linecount;
}
int main()
{
string FileTable [FileLength()][6];
}
首先,我不知道上述代码是否正确,或者我如何将文件中的值添加到FileTable
数组中。
一旦我的FileTable
数组中包含所有文件数据,我就希望能够在其他函数中使用它。
我能够做到:
if(FileTable[2][0] = 1)
{
cout << "The third name is: " << FileTable[2][3] << endl;
}
我理解我的代码在这里可能没有意义,但我希望它能够证明我尝试做的事情。
我必须为更大的文本文件执行此操作,并且每行的所有6个变量都与输入到函数有关。
答案 0 :(得分:0)
将每一行保持在自己的对象中,这更加清晰:
struct Entry
{
std::array<std::string, 6> items; // or a vector
};
主要:
std::vector<Entry> file_table( FileLength() );
请注意,首先读取整个文件以查找条目数是浪费时间。您可以从空向量开始,并在阅读时按下每个条目。
您的访问代码:
if( file_table.size() > 2 && file_table[2].items[0] == "1" )
{
cout << "The third name is: " << FileTable[2].items[2] << endl;
}
我实际上建议给Entry
个名字的成员,而不是只有6个数组。这将使您的代码更具可读性。 (除非你真的需要迭代它们,在这种情况下你可以使用枚举的枚举)。
如果您不喜欢operator[]
位,可以为Entry
定义.items
重载。
答案 1 :(得分:0)
由于行数是动态的,我建议使用向量而不是数组。您可以逐行将数据推回到矢量,直到您阅读eof。 也试着稍微研究一下OOP,它会让你的代码更容易理解。
看看这些: