getlineで区切るには?

解決


RxSx  2007-05-22 02:06:19  No: 65158

Excelの表をcsv形式にして
getlineで取り込んだものを「,」で区切って配列で使いたいのですが
以下のようにすると出力的にはカンマで区切れるのように見えるのですが
実際使おうとすると改行の部分で区切れていない状態(ee\nffと言う状態)
になってしまい使えないのですがどうすればいいでしょうか?
わかりにくい説明だとは思いますが宜しくお願いいたします。
----------------------------------
ifstream fin("a.csv");
string str;
while(getline(fin,str,','))
{
  cout << str << '\n';
}
----------------------------------
a.csvの中身は以下のような感じです。
aa,bb,cc,dd,ee
ff,gg,hh,ii,jj


επιστημη  URL  2007-05-22 06:55:47  No: 65159

こんなんでいいのかな?

#include <iostream>
#include <sstream>
#include <fstream>
#include <string>

int main() {
  std::ifstream fin("a.csv");
  std::string line;
  while ( std::getline(fin,line) ) {
    std::string token;
    std::istringstream stream(line);
    while ( std::getline(stream,token,',') ) {
      std::cout << '[' << token << ']' << std::endl;
    }
  }
}


RxSx  2007-05-22 19:13:22  No: 65160

早速回答していただいてありがとうございます。
おかげ様でほぼ解決できたのですが、
a.csvの中身が以下のようになっている時、
---------------
aa,bb,cc,dd,
ff,gg,hh,ii,jj
---------------
後で配列を使って列単位でソートなどをしたいので
本来は「ee」が入っている所に文字が入っていない場合にも
そこのスペースを確保しておきたいとおもってます。
他の部分が抜けてる場合は確保できるので問題がないのですが
このような場合はどうしたらいいと思いますか?
図々しくてすいません。


RxSx  2007-05-22 19:35:34  No: 65161

書き込んだところで思いつき、
最初にgetlineで取り込んだものに
str += ',';
を入れカンマを終わりに付ける事で自己解決いたしました。
ありがとうございました!!!


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加