こんにちは。
いつもお世話になっております。
開発環境は、win7(sp1)、delphiXE3enterprise(update適用なし)です。
stringreplace関数を使って、文字列をカンマ(#44)に変換しています。
変換対象は、スペース100個です。
スペース100個を変数に入れて、それを変換しています。
ただ、以下のようなときに困っています。
名称1(スペース1個)名称2(スペース100個)コード
stringreplace(s,sSpc100,#44,[rfReplaceAll]);
上記コードで、スペース1個も変換かけてカンマになります。
やりたいのは、スペース100個だけをカンマに変換かけたいということです。
どなたか教えてください。
よろしくお願いします。
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]);
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"と表示されますよ。
趣旨とは異なりますが、正規表現で書いてみました。
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;
こうなります。
遅くなってすみません。
なんか色々方法がありそうで。
現在copyで1文字ごとに見て、「100個の空白があったら・・・」というやり方をしていました。
試してみます。
ありがとうございました。
解決済みです。
ツイート | ![]() |