現在、勉強のためにUiPathを学習しています。人間が選択したファイルが特定のフォルダに存在した場合、新規でフォルダを作成する実装を考えています。
以下、実装の流れ
①人間が選択したファイル名(例:テスト.xlsx)をString型に格納(属性を取得 'editable text 名前’アクティビティ)
②特定のフォルダ内に存在する全ファイル(Excelファイル抽出)を一括取得し、配列に格納
↓
(System.IO.Directory.GetFiles(取得フォルダ,“*.xlsx”)
③「繰り返し (コレクションの各要素)」アクティビティにて、②で取得したExcelファイルを繰り返す。
この時、bodyに「条件分岐 (else if)」アクティビティを入れ、①のファイル名が取得されている変数と③で繰り返すitem(配列に格納されているフォルダパス)が等しければ、新規フォルダを作成
以上の実装をしています。
ですが、上記だと、すべて③の条件分岐でelseに行ってしまいます。
というのも、①の内部変数はファイル名、②の配列ではファイル名含むフォルダパス
を取得しているので、等しいと判断されません。
②の配列にフォルダ内のファイルを一括取得する際に、ファイル名のみ配列に入れられるメソッドや、他にいい実装方法があれば、ご教示お願い致します。
以下全体イメージ
ファイルマッチング実装
Yoichi
(Yoichi)
2
こんにちは
以下お試しください。
System.IO.Directory.GetFiles(取得フォルダ,"*.xlsx").Select(Function(f) System.IO.Path.GetFileName(f)).ToArray()
大文字小文字の揺れがあるようでした
System.IO.Directory.GetFiles(取得フォルダ,"*.xlsx").Select(Function(f) System.IO.Path.GetFileName(f).ToLower()).ToArray()
としておいて、比較対象もToLowerメソッドで小文字化したものを比較したほうが良いかもしれません。
ご回答ありがとうございます。
「大文字小文字の揺れ」とは具体的何なのでしょうか。
なぜ揺れるのでしょうか。
Yoichi
(Yoichi)
4
Windowsではファイルシステム上での大文字小文字は区別がありません。
そのため例えばTEST.txt と test.txtは同じファイル名として扱われます。
GetFilesで取得したファイル名が仮にtest.TXTであったとき、比較対象がtest.txtとすると
ファイルシステム上では同じとみなされる2つのファイル名が、UiPathでの文字列比較では不一致となります。そのため、大文字小文字を無視する比較や、大文字あるいは小文字に統一してから比較する方が安全なケースが多いかと思います。
もちろん要件によってこれを配慮する必要がなければ、不要で問題ないかと思います。
system
(system)
Closed
5
This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.