如何从.txt文件解析矢量列表

时间:2014-11-19 19:40:14

标签: c++

我有一个项目,我必须从.txt文件中读取矢量列表并解析它。我在屏幕上显示了矢量列表,但我不知道如何解析它。

#include <iostream>
#include <cstring>
#include <fstream>
#include <conio.h>

using namespace std;

int main() {
    ifstream vl;
    vl.open("PIXA.txt");
    char output[100];

    if (vl.is_open()) {
        while (!vl.eof()) {         
            vl >> output;
            cout << output;
        }
        vl >> output;
        cout << output;
    }
    cin.ignore();
    cin.get();

    vl.close();
    return 0;
}

有人可以帮忙添加代码,以便我可以解析这个.txt文件吗?

这是.txt文件的样子:

J
366 -1722   583
366   356  1783
866   789  1033
866 -1289  -167
366 -1722   583

J
-500 -1472   150
0 -1039  -600
0  1039   600
-500   606  1350
-500 -1472   150

J
366   356  1783
-500   606  1350
0  1039   600
866   789  1033
366   356  1783

J
366 -1722   583
866 -1289  -167
0 -1039  -600
-500 -1472   150
366 -1722   583

1 个答案:

答案 0 :(得分:1)

所以,有两件事可以帮到你。

首先,std::getline可以使用可选的分隔符参数。这很方便,因为您的矩阵由J分隔。

std::string line;

std::getline(in, line, 'J')

这将使line为空(对于文件中的第一个条目)或者包含一堆以空格分隔的整数的长字符串。请注意,std::getline会将分隔符从流中拉出,但不会将其添加到字符串参数中,因此在解析整数位时,您不必担心J

您可以将其输入std::stringstream,然后像这样将循环中的所有整数抽出:

std::vector<int> matrix;
std::stringstream ss(line);
int i;

while (ss >> i)
    matrix.push_back(i);

你会得到一个漂亮的1维向量,其中包含你的所有数字。编写一个简单的索引函数,可以在一个矩阵所需的行,列格式之间进行转换,以及你需要一个向量的偏移格式,这是一个练习给读者,因为它非常简单。不要忘记处理第一个J的空行情况!

你可以将这些东西包裹起来,

while (std::getline(in, line)) { /* ... */ }

很容易,做一些事情,比如生成一个矢量矢量,这些矢量很容易在你的应用程序中使用。