最近、仕事で使うツールを作ることになったため、久しぶりにDelphi6を起動しました。
StringListやCommatextなど昔使っていた頃を思い出してプログラミングしていたのですが、
どうしてもエラーが解けないところがありました。
原因が、Commatextが カンマのほかに半角空白も区切りと見てしまうという問題でしたが、
昔はそれに気づいていませんでした。
Commatextという名前なので、カンマだけを区切りというと思っていた私が浅はかだったのですが、
これをどう解決すればいいのかわかりません。
Delphi2006以降では解決可能だとサイトで分かったのですが、Delphi6という古いバージョンの
ものの場合、解決法がありましたらご教示願います。
よろしくお願いします。
カンマの間をダブルクォーテーソンで囲んでからCommaTextを通す
"A B","DE","F G"
ダブルクォーテーソンではなく、ダブルクォーテーションです。
文字の置き換えで、変換前の文字をカンマ。変換後の文字を "," をにして変換し
最後に文字列の前後に ” を追加すればよい。
以下のようにTStringListの設定を行ってから使っては如何でしょうか?Delphi6でも使えるといいのですが。使えなかったらすいません。
var sl:TStringList;
bagin
sl:=TStringList.Create;
try
//引用符文字(")の指定
sl.QuoteChar:='"';
//区切り文字(,)の指定
sl.Delimiter:=',';
//指定した区切り文字だけを使用するように設定
sl.StrictDelimiter:=True;
//以下省略
上記の続きです。(すいません)
CommaTextを使わずに、DelimitedTextをつかいます。
sl.DelimitedText:='あ ,い, う,え お';
はずしていたらすいません。
質問者ではありませんが
フィールドに空白(半角SP)が含まれる CSV ファイルを処理するには?(2006 以降)
https://ht-deko.com/tech036.html#tech065
とのことなので、DelimiterやStrictDelimiterは、Delphi 2006なんでしょうね。
少なくともDelphi 6 には、ありませんでした。
空白を一時的に別の文字に🐸とか?
Delphi 6 / 7 では自力で処理することになるでしょう.
以下のサンプルで,デリミタを , ( カンマ ) だけにすれば csv データの分割になります.
[ 任意のデリミタによる文字列の分離 ] - Halbow 資料館
http://mrxray.on.coocan.jp/Halbow/Notes/N021.html#List7
[ 958] [ 06_複数のデリミタ文字を扱う例 ]
http://mrxray.on.coocan.jp/Delphi/plSamples/958_SplitDelimiter.htm#06
もし,分割前の文字列内の,ダブルクォーテーションで括られた文字列に
, ( カンマ ) が存在しないと仮定すれば,
, ( カンマ ) を改行文字に置き換える方法も考えられます.
TStringList.Text := StringReplace(LText, ',', sLineBreak, [rfReplaceAll]);
分離した結果の各文字列から,括り文字としてのダブルクォーテーションを削除したい場合は,
AnsiDeQuotedStr 関数が利用できます.
LText := AnsiDeQuotedStr(LText, '"');
※ Halbow 資料館のサンプルは Delphi 3 / 4 / 5 で作成されています.
過去ろぐ
https://www.petitmonte.com/bbs/answers?question_id=2926
ツイート |