2016-06-01 10 views
0

QTのアプリケーションで作業していますが、C++ I/Oの新機能です。私は現在、2列といくつかの行を持っているCSVファイルからいくつかのデータを読みたいと思う:(1 | 10)(2 | 20)私はちょうどこのような配列にそれらを保存したい(1,10,2、 20)。いくつかの場合、2番目の列の値だけが配列に格納されます。ここにいくつかのコードがあります。だから、私が得る結果は、それが最初の列の最初の行を読み込むことで、その後、読み取りに移動getline()関数でCSVファイルを読むのが正しく動作しません。

void readingFiles::openFile(){ 

ofstream myFile; 
myFile.open("/home/Dan/Desktop/mainFile.csv" ,std::ios::app);} 

void readingFiles::addReadings(int readings1 , int readings2){ 



    if(myFile.is_open()){ 

      myFile<<readings1<<","<<readings2<<"\r"; 
      myFile.close(); 


} 
} 

vector<int> values ; 
ifstream iFile; 
iFile.open("/home/Dan/Desktop/mainFile.csv");} 
string data; 

void readingFiles::read(){ 
    for(int i =0; std::getline(iFile,data, ',') ; i++){ 
      values.insert(values.end() , atoi(data.c_str())); 
      qDebug("vector list is %i" , values[i]);} 
} 

:私は何度もチェックしましたが、私はまだ私が間違ってやっているかを見ることができません2列目から、最初の列に戻ることはありません(1、10、20、30、40など)。私が得ようとしているのは、(1、10、2、20、3、30など)です。

+1

あなたのコードは完全に台無しです。 'myFile <<'行の最後に ';'がなくなり、 '{'文字が不一致になります。実際にコンパイルするコードを投稿してください。 – Barmar

+0

ああ私はこの質問をしたときにそれらは誤植です、私のメインコードは大丈夫です投稿を修正します – Dan

+0

また、入力ファイルの可読な例を投稿してください。 – Barmar

答えて

0

問題は、2回目のコールでgetline10\n2を返すことです。それでatoiはこれを10に変換します。したがって、あなたは2を失います。getlineは改行を破棄することになっているので、なぜこれが起こっているのか分かりません。少し醜いですが、の後に何かを取り、ベクトルに追加するために10\n2dataに解析します。

私はこれをVC 2013でテストしました。これは区切り文字付きのgetlineの動作です。私は周りのグーグルでそれはそれが意図されているように見えますgetline区切り文字では、リテラル文字として改行を扱います。これは動作します:

string line; 
for (int i = 0; std::getline(myFile, line); i++) 
{ 
    stringstream ss(line); 
    for (int i = 0; std::getline(ss, data, ','); i++) 
    { 
     values.insert(values.end(), atoi(data.c_str())); 
    } 
} 
for (int i = 0; i < values.size(); i++) 
{ 
    cout << "vec=" << values[i] << endl; 
} 
関連する問題