フォルダ内の重複するファイル名に対しての処理方法

フォルダの中身は下記内容でファイルが保存されています。
①東京(県名)_②渋谷区(地域)_③123456(ID)_④A(指定のアルファベット)_⑤20200319(日付)

各フォルダごとにエクセル処理を行っていくのですが、
ファイル名の②(地域)と③(ID)がフォルダ内に同じのが存在したら(重複していたら)、
このフォルダは処理を行わずに、エラーメールを送るフローを作りたいです。

ご教示願います

※下記画像の場合は②渋谷区と③115065が同じのためこのフォルダごと処理を無効にしたい
a (2)

@Y.H さん

とてもよい解決策とはいえませんが、
下記のサンプルをご参照ください。
filenames = Directory.GetFiles(“D:\Test”)
keyStringList = New List(Of String)
keyString = filename.Split("_".ToCharArray)(1) +filename.Split("_".ToCharArray)(2)

1 Like

ご教示ありがとうございます!

keyString = filename.Split("".ToCharArray)(1) +filename.Split("".ToCharArray)(2)
上記の変数の型は何を選択すればよろしいでしょうか。

@Y.H さん

変数の定義は下記のようです。

こんにちは

arrFilePath = System.IO.Directory.GetFiles(folder,"*.xlsx")

としてファイル一覧を取得しておいた上で
Ifの条件を下記とすることで判定できると思います。

arrFilePath.Count=arrFilePath.Select(function(x) System.Text.RegularExpressions.Regex.Match(System.IO.Path.GetFileName(x),"(?<=^.+?_).+?_.+?(?=_)").Value).Distinct().Count

サンプル添付します。

Sequence1.xaml (5.7 KB)

1 Like

わざわざサンプルを作っていただきありがとうございます!
無事分岐することができました!

ifのコードは今の私じゃ複雑すぎて理解できていないので、空いた時間見つけてコードについて考えてみたいと思います!

1 Like

解決を押させてはいただいたのですが、もう1点質問がありまして、
今回は重複しているファイル名があったらそのフォルダを無効にしていたのですが、
重複ファイルだけ無視して、残りのファイルは処理を行うってことも可能でしょうか?

追記で失礼します。
可能でしたらプログラムの書き方についてもご教示いただけたら幸いです。

こんにちは

やり方はいろいろありますが、以下一例です。

arrFilePath = System.IO.Directory.GetFiles(folder,"*.xlsx").GroupBy(function(x) System.Text.RegularExpressions.Regex.Match(System.IO.Path.GetFileName(x),"(?<=^.+?_).+?_.+?(?=_)").Value).Where(function(g) g.Count()=1).Select(function(v) v.First()).toArray()

で重複していないもののフィルパス配列が取得できると思います。

1 Like

ありがとうございます!
お手数おかけしましてすみませんでした。
Yoichiさんには感謝しかありません><!

1 Like

This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.