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

时间:2014-05-13 01:38:57

标签: c++ variables multidimensional-array

我有一个.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个变量都与输入到函数有关。

2 个答案:

答案 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,它会让你的代码更容易理解。

看看这些:

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

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