0

を含むファイルがあります

99,0,0,0,0,0
99,1234,0011,4314,4901,4930
e.t.c.

ファイルを整数の 2D ベクトルに読み込みたい。私はC ++にかなり慣れていません。すべての行の列数は x です。行数は不明です。すべての値はコンマで区切られています。

値を 1d ベクトルに読み込むことはできますが、マトリックス部分を正しく取得できないようです。

これは私がこれまでに持っているものです。

    #include <cstdlib>
    #include <iostream>
    #include <sstream>
    #include <fstream>
    #include <string.h>
    #include <string>
    #include <vector>
    //declare data variables
    using namespace std;

    typedef vector<int> mline;
    typedef vector<mline> matrix;

    matrix sdata;
    matrix confdata;

    int writeFile();
    int readFile();


    int main ()
    {

    readFile();
    writeFile();

    }

    int writeFile ()
    {
     return 0;
    }

    int readFile()
    {
    int i = 0;
    int j = 0;
    //int k = 0;
    int spos = 0;
    int epos = 0;
    int endpos = 0;
    int slenght = 0;
    int buffersize;
    int tmpint;
    stringstream outs;
    mline tmpline;
    string filename = "sensorbase.txt";
    string tmp;
    vector<string> bufferstr;
    string delimiter = ",";
    ifstream inputFile(filename);
        string line;

        while (getline(inputFile, line))
        {
            istringstream ss(line);
                ss >> tmp;
                    bufferstr.push_back(tmp);
            i++;
    }
    buffersize = bufferstr.size();

    while(j<buffersize){
    tmpline.clear();

    endpos = bufferstr[j].rfind(delimiter);
    slenght = bufferstr[j].size();

        while (epos+1<endpos){
    if (epos!=0){spos = epos+1;}
    epos = bufferstr[j].find(delimiter, spos);

    //printf("%s",bufferstr[j].substr(spos, epos-spos).c_str());
    outs.clear();
    outs << bufferstr[j].substr(spos, epos-spos);
    outs >> tmpint;
    tmpline.push_back(tmpint);

    }
    if (slenght>endpos){
                spos = endpos+1;
                        //printf("%s",bufferstr[j].substr(spos, slenght-        endpos).c_str());
    outs.clear();
    outs << bufferstr[j].substr(spos, slenght-endpos);
    outs >> tmpint;
    tmpline.push_back(tmpint);
                }
    sdata.push_back(tmpline);
    j++;
    spos = 0;
    epos = 0;
    }

    printf("A3 %i, B5 %i",sdata[0][0],sdata[0][1]);
    return 0;
    }
4

1 に答える 1

2

各コンマの前に整数を取得するためにstd::getline、区切り文字を使用できます。,

#include <iostream>
#include <string>
#include <sstream>
#include <vector>

typedef std::vector<int>   mline;
typedef std::vector<mline> matrix;

int main()
{
    std::ifstream in("sensorbase.txt");
    matrix data;

    for (std::string line, number; std::getline(in, line);)
    {
        mline temp;
        std::istringstream iss(line);

        while (std::getline(iss, number, ','))
        {
            temp.push_back(std::stoi(number));
        }

        data.push_back(temp);
    }
}
于 2013-10-23T20:36:05.047 に答える