将文件数据变量存储在维度数组中



我有一个.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数组,我就希望能够在其他函数中使用它。

I've been able do:

if(FileTable[2][0] = 1)
{
    cout << "The third name is: " << FileTable[2][3] << endl;
}

我知道我的代码在这里可能没有意义,但我希望它能说明我想做的事情。

对于一个较大的文本文件,我必须这样做,并且每行的所有6个变量都与输入函数有关。

将每一行保持在自己的对象中,这样更清晰:

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个成员的数组。这将使您的代码更具可读性。(除非你真的需要遍历它们,在这种情况下,你可以使用枚举作为索引)。

如果你不喜欢.items位,你可以为Entry定义一个operator[]过载

由于行数是动态的,我建议使用向量而不是数组。您可以逐行将数据推回向量,直到读取eof。也试着学习一下OOP,它会使你的代码更容易理解。

看看这些:

http://www.cplusplus.com/reference/vector/vector/

http://www.geeksforgeeks.org/eof-and-feof-in-c/

相关内容

  • 没有找到相关文章