stringreplaceについて

解決


やまだ  2013-10-28 21:04:49  No: 45482

こんにちは。

いつもお世話になっております。
開発環境は、win7(sp1)、delphiXE3enterprise(update適用なし)です。

stringreplace関数を使って、文字列をカンマ(#44)に変換しています。
変換対象は、スペース100個です。

スペース100個を変数に入れて、それを変換しています。

ただ、以下のようなときに困っています。

名称1(スペース1個)名称2(スペース100個)コード

stringreplace(s,sSpc100,#44,[rfReplaceAll]);

上記コードで、スペース1個も変換かけてカンマになります。

やりたいのは、スペース100個だけをカンマに変換かけたいということです。

どなたか教えてください。

よろしくお願いします。


deldel  2013-10-28 22:15:21  No: 45483

100個と分かっているのなら、これでもいいかなと。
var
  s, sp100, cm100: string;
begin
  sp100 := StringOfChar(' ', 100);
  cm100 := StringOfChar(#44, 100);

  s := '名称1 名称2' + sp100 + 'コード';

  s := StringReplace(s, sp100, cm100, [rfReplaceAll]);

可変個数なら、こういうのでもいいかなと。
  sp100 := StringOfChar(' ', 10);

  s := '名称1 名称2' + sp100 + 'コード';

  s := StringReplace(s, ' ', 'ありえない文字列', [rfIgnoreCase]);
  s := StringReplace(s, ' ', #44, [rfReplaceAll]);
  s := StringReplace(s, 'ありえない文字列', ' ', [rfIgnoreCase]);


Quest  2013-10-29 03:21:12  No: 45484

procedure TTestForm1.Button1Click(Sender: TObject);
var
  s: string;
  sp100: string;
begin
  sp100 := StringOfChar(' ', 100);
  s := 'A B' + sp100 + 'C';
  Edit1.Text := s;
  s := StringReplace(s, sp100, #44, [rfReplaceAll]);
  Edit2.Text := s;
end;
これで、ご希望通りEdit2には"A B,C"と表示されますよ。


DEKO  2013-10-29 06:41:48  No: 45485

趣旨とは異なりますが、正規表現で書いてみました。
100個の空白のみカンマへ置換します。

uses
  ..., RegularExpressions{, SkRegularExpressions};

var
  s: String;
begin
  s := '名称1' + #32 + '名称2' + StringOfChar(#32, 100) + 'コード';
  s := TRegEx.Replace(s, ' {100}', #44);
  ShowMessage(s);
end;

50個以上の連続した空白をカンマに変換するには

var
  s: String;
begin
  s := '名称1' + #32 + '名称2' + StringOfChar(#32, 100) + 'コード';
  s := TRegEx.Replace(s, ' {50,}', #44);
  ShowMessage(s);
end;

こうなります。


やまだ  2013-11-06 23:26:57  No: 45486

遅くなってすみません。

なんか色々方法がありそうで。

現在copyで1文字ごとに見て、「100個の空白があったら・・・」というやり方をしていました。

試してみます。

ありがとうございました。


やまだ  2013-11-06 23:27:36  No: 45487

解決済みです。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加