• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:文字として, "を使用するCSVファイルの取り扱い)

文字列として扱うCSVファイルの取り扱い方法

このQ&Aのポイント
  • CSVファイルの中で文字として扱いたい場合、カンマやダブルクォートに注意が必要です。
  • C言語ではfgetsとstrtokを使用してCSVファイルを効率的に取り扱うことができます。
  • カンマ間の項目のダブルクォート数をカウントし、その数に応じて文字列を取り扱う方法を説明しています。

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

  • ベストアンサー
  • Wap58
  • ベストアンサー率33% (29/87)
回答No.4

ざっくりstrtokで改行も弾いて関数使いまくり','に置き換えました やはり文字列飲み込んで"カウントして切り貼りしなきゃいけないかな #include <stdio.h> #include <string.h> int main(void){ char str[] = "\"100,AAA,002\",\"1,B\nB\"2B,,B3\",\"1CCC,\n,\"2\"3,4\""; char *point = str , mem[10][30] = {{}} , co_1 , co_2; for(co_1 = 0; (point = strtok(point,",\n")) != NULL; co_1++){ if(*(point+(strlen(point)-1)) != '"'){ strcat(strcat(mem[co_1],point),","); co_1--; }else{ strcat(mem[co_1],point); } point = NULL; } for(co_2 = 0; co_2 < co_1; co_2++) printf("%s\n",mem[co_2]); return 0; }

その他の回答 (3)

回答No.3

その昔、状態遷移を使って同様のCSV-parserを実装しました。

参考URL:
http://codezine.jp/article/detail/5531
回答No.2

参考URLに記載の質問のベストアンサーのロジックがご要望に適しているかと思います。 CSVの一般的な書式はRFC4180に定義されていますので、 ご参考までに。 http://www.kasai.fm/wiki/rfc4180jp 但し、ダブルクォート有りの場合、ダブルクォート内に改行も記述する事が可能なので、 これも考慮する必要があります。 この場合、各項目を抽出する前にダブルクォートが偶数となるまで 次行と連結する処理などが必要となります。

参考URL:
http://okwave.jp/qa/q4435021.html
daisuki1192
質問者

お礼

ありがとうございます。 区切り文字を","としている点が少し私の行いたい事と異なっていましたがロジックはかなり参考になりました。

  • maiko0333
  • ベストアンサー率19% (839/4401)
回答No.1

(1)は良いとして、 (2)から(4)は""を"に置き換えていけばいいと思います。 ロジック的に言うと「"が出てきたら1つ前が"なら無視する」でいい。

daisuki1192
質問者

お礼

ありがとうございます。 参考にさせていただきます。