Watch, Follow, &
Connect with Us

For forums, blogs and more please visit our
Developer Tools Community.


Welcome, Guest
Guest Settings
Help

Thread: 二重引用符内に改行を含むCSVの扱い



Permlink Replies: 2 - Last Post: Sep 30, 2017 6:46 AM Last Post By: Yusuke MITSUISHI
Yusuke MITSUISHI

Posts: 14
Registered: 5/20/13
二重引用符内に改行を含むCSVの扱い
Click to report abuse...   Click to reply to this thread Reply
  Posted: Sep 17, 2017 1:45 AM
 また基本的なことで恐縮ですが,CSV で二重引用符内に改行が含まれる場合の C++Builder での取り扱い方法について質問です。

 説明の都合,まず CSV への変換から入りますが,下記のように改行が含まれる2次元文字列配列を TStrings を用いて CSV に変換します。

char *csv[2][2] = {{"A1\nA2", "B1\nB2"},{"A3\nA4","B3\nB4"}};

TStringList *sl = new TStringList;
TStringList *sl1 = new TStringList;

sl->Add(csv[0][0]); sl->Add(csv[0][1]);
sl1->Add(sl->CommaText); // ※1
sl->Clear();
sl->Add(csv[1][0]); sl->Add(csv[1][1]);
sl1->Add(sl->CommaText); // ※2
sl1->SaveToFile("test.csv");

 ここまでは問題ありません。
 次に sl1ー>LoadFromFile("test.csv") で読込んだ後,sl->CommaText = sl1->Text では1次元配列になってしまいます。2次元に復元するには,CommaText に代入する前に,sl1->Text を,上記で Add した ※1と※2に分ける必要があります。
 ここで,引用符内の改行を無視しつつ,引用符外の改行では文字列が分割されることを期待して

sl->Delimiter = L'\n';
sl->QuoteChar = L'\"';
sl->DelimitedText = sl1->Text;

 としても,改行に QuoteChar が効くことはないようです。

 期待した動作を得たいだけなら TStrings を諦め,1文字ずつ調べて自力で処理することは可能ですが,他人に見せるに相応しい標準的な方法があればご教示下さい。
igy kk

Posts: 147
Registered: 9/11/03
Re: 二重引用符内に改行を含むCSVの扱い
Click to report abuse...   Click to reply to this thread Reply
  Posted: Sep 19, 2017 5:47 AM   in response to: Yusuke MITSUISHI in response to: Yusuke MITSUISHI
Yusuke MITSUISHI wrote:
期待した動作を得たいだけなら TStrings を諦め,1文字ずつ調べて自力で処理することは可能ですが,
他人に見せるに相応しい標準的な方法があればご教示下さい。

標準的な方法は、わかりませんが、

Delphiの掲示板では、以下のような書き込みがありました。

改行付きCSVファイルの取り込み
http://madia.world.coocan.jp/cgi-bin/DelphiBBS/wwwlng.cgi?print+200606/06060015.txt

参考までに・・
Yusuke MITSUISHI

Posts: 14
Registered: 5/20/13
Re: 二重引用符内に改行を含むCSVの扱い
Click to report abuse...   Click to reply to this thread Reply
  Posted: Sep 22, 2017 5:44 PM   in response to: igy kk in response to: igy kk
 igy kk さんありがとうございます。

 さすがに20年ぶりに Delphi のコードを見るとちんぷんかんぷんで、TStringListEx なんて出来たのかとうっかり HELP で
検索してしまいました。コードはまだ理解していませんが、やはり自分で解析して取り込むのですね。

 私はこれでいいと思うのですが、プログラムを作る人達から「二重引用符内で改行してくれるな」と言われてしまうと、
これでも分かりにくい負の遺産なのかと思い悩んでしまいます。

Edited by: Yusuke MITSUISHI on Sep 30, 2017 10:42 PM
Legend
Helpful Answer (5 pts)
Correct Answer (10 pts)

Server Response from: ETNAJIVE02