• ベストアンサー

freadでcsvファイルを読み込んだ後、改行コードを終端文字に変換し

freadでcsvファイルを読み込んだ後、改行コードを終端文字に変換したいです。 どのように変換したらいいでしょうか? C++初心者です。よろしくおねがいいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.4

Caution: 以下の回答はstrtok()の仕様を知らないとドツボにはまる可能性が非常に高くなります。 また、CSVの仕様では「改行込みのデータを許す」ためこの方法だと改行込みデータは解析不能です。 要するに一括で取ってきたファイルの中身を行単位で拾いたい、ということですよね? であればstrtok()で分割しながら取っていくのが楽でしょう。 char *p; // fread()で読み込んだデータ本体 領域は別途malloc()等で確保 char *t; // 切り出した行の先頭を指すポインタ ...(中略)... t = strtok(p, "\r\n"); while(t != NULL) { ... t = strtok(NULL, "\r\n"); }

komakomachi
質問者

お礼

わ~!まさにやりたいことです! 実際にコード書いてみたところ、とても満足いく結果が得られました☆ありがとうございました♪

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • titokani
  • ベストアンサー率19% (341/1726)
回答No.3

行単位に処理したいなら、freadじゃなくて、行単位での読み込み関数を使ったほうがいいです。Cの標準関数なら、fgetsとか。 でも、本気でCSVを処理するなら、行単位ではなくて、文字単位の処理にしなくてはなりませんが。

komakomachi
質問者

補足

文字単位といいますとどうゆうことでしょうか?確かにcsvファイルはダブルクオーテーションなど気をつけないといけないことがあると思います。その解析のことでしょうか?

すると、全ての回答が全文表示されます。
回答No.2

テキストモードでfopenした場合、改行文字は'\n'、終端文字は'\0'ですから、freadで読み込んだ先のメモリバッファ中の'\n'を探して'\0'に置き換えればよいかと。 バイナリモードの場合はOS等の環境によって改行文字が違うので注意が必要です。

すると、全ての回答が全文表示されます。
回答No.1

C++ならgetlineの方が楽じゃないかしら。 std::ifstream stream("filepath"); std::string line; while ( std::getline(stream,line) ) { //... }

すると、全ての回答が全文表示されます。

関連するQ&A