Delphi6でCommatextプロパティの半角空白が区切りになってしまう問題


セン  2022-11-20 07:09:35  No: 150678  IP: 192.*.*.*

最近、仕事で使うツールを作ることになったため、久しぶりにDelphi6を起動しました。
StringListやCommatextなど昔使っていた頃を思い出してプログラミングしていたのですが、
どうしてもエラーが解けないところがありました。
原因が、Commatextが カンマのほかに半角空白も区切りと見てしまうという問題でしたが、
昔はそれに気づいていませんでした。
Commatextという名前なので、カンマだけを区切りというと思っていた私が浅はかだったのですが、
これをどう解決すればいいのかわかりません。
Delphi2006以降では解決可能だとサイトで分かったのですが、Delphi6という古いバージョンの
ものの場合、解決法がありましたらご教示願います。
よろしくお願いします。

編集 削除
六太  2022-11-20 08:45:54  No: 150679  IP: 192.*.*.*

カンマの間をダブルクォーテーソンで囲んでからCommaTextを通す
"A B","DE","F  G"

編集 削除
六太  2022-11-20 08:53:50  No: 150680  IP: 192.*.*.*

ダブルクォーテーソンではなく、ダブルクォーテーションです。
文字の置き換えで、変換前の文字をカンマ。変換後の文字を "," をにして変換し
最後に文字列の前後に ” を追加すればよい。 

編集 削除
mam  URL  2022-11-21 00:31:34  No: 150688  IP: 192.*.*.*

以下のようにTStringListの設定を行ってから使っては如何でしょうか?Delphi6でも使えるといいのですが。使えなかったらすいません。

var sl:TStringList;
bagin

sl:=TStringList.Create;
try
  //引用符文字(")の指定
  sl.QuoteChar:='"';
  //区切り文字(,)の指定
  sl.Delimiter:=',';
  //指定した区切り文字だけを使用するように設定
  sl.StrictDelimiter:=True;

//以下省略

編集 削除
mam  2022-11-21 00:54:44  No: 150689  IP: 192.*.*.*

上記の続きです。(すいません)
CommaTextを使わずに、DelimitedTextをつかいます。
sl.DelimitedText:='あ ,い,  う,え  お';

はずしていたらすいません。

編集 削除
カミーユ  2022-11-21 03:47:25  No: 150690  IP: 192.*.*.*

質問者ではありませんが

フィールドに空白(半角SP)が含まれる CSV ファイルを処理するには?(2006 以降)
https://ht-deko.com/tech036.html#tech065

とのことなので、DelimiterやStrictDelimiterは、Delphi 2006なんでしょうね。
少なくともDelphi 6 には、ありませんでした。

編集 削除
AAAAA  2022-11-22 15:55:11  No: 150696  IP: 192.*.*.*

空白を一時的に別の文字に🐸とか?

編集 削除
Mr.XRAY  2022-11-24 23:30:02  No: 150700  IP: 192.*.*.*

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 で作成されています.
 

編集 削除
 2022-11-28 04:08:36  No: 150701  IP: 192.*.*.*

過去ろぐ
https://www.petitmonte.com/bbs/answers?question_id=2926

編集 削除