パスの有無を確認において、アスタリスクを利用したファイル指定

みなさんお疲れ様です
以下の図のように、アスタリスクを利用したファイル指定は、有効でしょうか?
アスタリスクの箇所は都度変更となるため、このように指定し、1つでもファイルがあれば処理をしたいです

やってみて、どんな結果でした?

お疲れさまです
条件分岐でElseに落ちちゃいますね。。。

なかなか悩ましい話ですね。

パスの有無を確認する前に、配列に入っているフルパス名がそのワイルドカードと一するかを聞いて、それからパスの有無を確認と言う、やや手間なロジックでは如何でしょう?

ファイルの一覧を処理する場合、一般的にはコレクションの各要素アクティビティを使用して、コレクションの所に

System.IO.Directory.GetFiles(“フォルダパス”)

を設定すると思いますが、ファイル名の指定も使用可能で

system.IO.Directory.GetFiles(“フォルダパス”,“特定の文字”)

とすることが出来ます。
※今回の場合
system.IO.Directory.GetFiles(wkfolder,“AreaImage*.csv”)

※件数だけほしい場合はstringの配列で返ってきますので、.Lengthで取得可能です。

※書いておいてなんですが、HANACCHIさんの言うように、多少手間がかかっても、ループで1件ずつ処理したやり方の方が私的にはおすすめです。
(現場担当者で保守する場合、単に短く記述したりするのではなく、なるべく前提知識がなくても読める(変更できる)ことが大事だと思っているからです。あまりに複雑になるものは別ですが。。)

2 Likes

せっかくなのでブログ書いてみた。
Stringの配列で要素があるかどうかは Anyメソッド使うのがお勧めです。

「.NETの関数を使ってワイルドカードを使用したファイルの存在チェックがしたい!」
http://blogs.wankuma.com/chuki/archive/2020/06/30/1784056.aspx

1 Like

このような形で作ってみました。
ただ、、、、TRUEにならないですね。。。条件が正しくないですかね。。。
image

ワイルドカードを使った比較は=では難しいです。
※できないんじゃないかな。。。

2つほど解決案を

1.文字列の一致をチェックのアクティビティを使用する

正規表現は
“^” & wkfolder & “AreaImage.*\.csv$”

になるかと思います。

※アクティビティなので、正攻法なのですが、正規表現は正直理解が難しいかと。。

2.Likeを使用する

Conditionに

item.ToString Like wkfolder & “AreaImage*.csv”

と入力していただければ希望通りになるかと。

※こちらの方が分かりやすいかと思います。
以下参考
https://docs.microsoft.com/ja-jp/dotnet/visual-basic/language-reference/operators/like-operator

1 Like

item.ToString.Contains("Arealmage")
でやってみてください。
item.ToString = ("Arealmage*.csv")
この場合だと「*」の字は普通の文字で見るので、条件としてはTRUEにならないですねー

いろんな方法がありますが:

Directory.GetFiles() でファイル名を取得するのではなく、
Directory. GetFileSystemEntries()を使うとパターンマッチングでファイル名を指定できるので、
実現したい方法にもう少し近づくかもです。

http://hensa40.cutegirl.jp/archives/820

パターンマッチングでマッチしたファイルを配列で返すので、IFの条件は [ファイル名配列].length =0 とかでよいのかな。

DirectoryInfo.GetFilesやEnumerateFilesを使用する場合、予想とは違う動きをするケースがあるようです。

ループで処理した方が無難かも。。

2 Likes

こちらの方法で実装いたしました。特定の文字のファイルがあれば、そのファイルを処理するやり方としました。
ありがとうございます