MatchesMask で [ ] 文字を使うには?

解決


けど  2012-09-10 07:05:07  No: 42877

初歩的な質問ですみません
MatchesMask でファイル名の照合をしていますが先頭に[資料] とか入ってると「〜は正しくないマスク文字です.」とエラーになります

  if Masks.MatchesMask('[資料]a.txt','[資料]*') then
    Caption:='ok' else Caption:='no';

エスケープシーケンス?するにはどうしたらよいのでしょう?
``の様に[[ したり""でくくったりしましたがダメでした
とりあえず動かしたいのはDelphi5です


DEKO  2012-09-10 09:07:40  No: 42878

こんにちは。

[] は文字セット (スキャンセット) の為に利用されているので、
取得したファイル名の [] をファイル名に使えない文字...例えば <> とかに置換してみてはいかがでしょうか?

function EscapeScanset(s: string): string;
begin
  result := StringReplace(s     , '[', '<', [rfReplaceAll]);
  result := StringReplace(result, ']', '>', [rfReplaceAll]);
end;

if Masks.MatchesMask(EscapeScanset('[資料]a.txt'), EscapeScanset('[資料]*')) then
  Caption:='ok' else Caption:='no';

[Masks.MatchesMask]
http://docwiki.embarcadero.com/Libraries/ja/System.Masks.MatchesMask


けど  2012-09-10 10:04:48  No: 42879

なるほど、比較する時だけ置換すればいいのですね
頭が固くなっていたようです
ありがとうございました


けど  2012-09-10 10:05:35  No: 42880

すみませんチェック忘れです


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

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






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