将制表符分隔值从文本文件读取到数组

时间:2018-01-10 12:52:35

标签: c++ arrays read-text

嘿,我对C ++很陌生,我遇到了一个问题:

我有一个看起来像这样的文本文件:

500

1120

10

number1,1 number1,2   ...   number1,500

number2,1

.

.

number1120,1

因此,文本文件顶部的前两个值描述了矩阵的维度。我现在想编写一个代码,它将矩阵中的所有文件读入int值的数组或向量中。我可以读取前三个值(500,1120,10)并使用getlinestringstream将它们写成整数值,但我无法弄清楚如何读取分离的矩阵循环。

3 个答案:

答案 0 :(得分:2)

这样的事情:

#include <iostream>
#include <sstream>

// Assume input is 12,34,56. You can use 
// getline or something to read a line from
// input file. 
std::string input = "12,34,56";

// Now convert the input line which is string
//  to string stream. String stream is stream of 
// string just like cin and cout. 
std::istringstream ss(input);
std::string token;

// Now read from stream with "," as 
// delimiter and store text in token named variable.
while(std::getline(ss, token, ',')) {
    std::cout << token << '\n';
}

答案 1 :(得分:0)

您可以考虑使用循环逐行读取矩阵,并使用标记器(例如std::strtok)或在分隔符处分割行的嵌套循环拆分当前行。 有一个关于tokenizers的帖子。

答案 2 :(得分:0)

感谢我的答案我现在可以阅读所有数据,并将其分成数组,但不幸的是我遇到了一个非常令人厌烦的问题。所以这是我的代码:

// Matrix deklarieren 
    long int** mat_dat = new long int *[m_height];
    for (long int a = 0; a < m_height; ++a)
        mat_dat[a] = new long int[m_width];

    //ganzes Feld als String einlesen


    //Daten aus Textdatei lesen
    long int i = 0;
    long int j = 0;
    long int value = 0;
    while (myfile.good())
    {
        getline(myfile, test);
        istringstream ss(test);
        string token;
        while (std::getline(ss, token, '\t'))
        {
            cout << token << '\t';
            value = atoi(token.c_str());
            mat_dat[j][i] = value;
            i++;
        }
        if (j == m_depth)
        {
            break;
        }
        j++;
        i = 0;

它将所有数据完美地保存到数组中,这就是我的想法。但是,当我看起来只关闭数组的前512个值是正确的(mat_dat [0] [512]是正确的)和(mat_dat [1] [512]是正确的。来自mat_dat [0]的行中的以下值[ 512]到mat_dat [0] [1120]是不正确的。你有没有任何线索为什么它在那个地方开始变得不正确?