Powershell呼び出し

お世話になっております。
「Powershell呼び出し」アクティビティを使って、既存のCSVファイル「YYYYMMDD_A.csv」に対し、ダブルクォーテーション付き、UTF-8のCSVファイル「YYYYMMDD_B.csv」にエンコーディング処理したいです。

Powershellでのスクリプト作成方法がよくわからないですが、「YYYYMMDD_A.csv」があるパス名(可変性があるもの)を先に指定し、「YYYYMMDD_A.csv」をimportして「YYYYMMDD_B.csv」にexportすることを考え、

“cd “”” + strCSVFolder + “”“” + chr(13) +" import-csv " + YYYYMMDD + “_A.csv” + " | export-csv " + YYYYMMDD + “_B.csv” + " -NoTypeInformation -Encoding UTF8"

のように書いてみました。(strCSVFolder:「A.csv」が入っているフォルダーパス名)

この時に、1文目と2文目の間に改行コード「chr(13)」を入れましたが、上記の文だと、YYYYMMDD + "_A.csv"が格納されているパス名を、構築しているロボット(xamlファイル)の格納先を見ることになってしまいます。

どのように修正すれば良いか、ご教示いただけますようお願いいたします。

※Powershell呼び出しアクティビティの中、TypeargumentはStringを選択、スクリプト入力にチェックを入れてある状態です。

こんにちは

Powershellを使う理由は何かありますでしょうか?
UiPathの中で処理してしまった方が良くはないでしょうか?

1 Like

Yoichiさん

お世話になっております。
UiPath内で処理できるのであれば一番いいと思っています。
やりたいことは、Excelファイルに入力したデータに対して、各セルをダブルクォーテーションで囲んだうえCSVファイル(UTF-8)に変換したいと思っています。単にUTF-8のCSVファイルに変換するだけであれば、名前を付けて保存のところで選択すればいいと思いますが、ダブルクォーテーションのところがどうすればつけられるのかが分からず、Powershellに至ったところであります。
Textファイルで見たイメージは以下の通りです。
image

こんにちは

上記はアウトプットでしょうか?

CSVの特殊文字が無いことが前提ですが、以下の式を試せますでしょうか?

strCsv = String.Join(vbcrlf,strCsv.Split(vbcrlf.ToCharArray,StringSplitOptions.RemoveEmptyEntries).Select(Function(s) """"+String.Join(""",""",s.Split({","c}))+""""))

1 Like

Yoich 様

いただいた内容で修正してテストし、テキストファイルで確認するとダブルクォーテーションで囲まれて保存されていることが確認できました!
ありがとうございます。
ちなみに、教えてくださった文がどういう意味なのかを教えていただくことはできますでしょうか。

やっていることは、
1.改行で分割
2.1で各要素をカンマで分割
3.2で分割した各要素を、"," で結合、その上で前後に " を付加
4.3を改行で結合
になります。

これを踏まえて

String.Join(vbcrlf,strCsv.Split(vbcrlf.ToCharArray,StringSplitOptions.RemoveEmptyEntries).Select(Function(s) """"+String.Join(""",""",s.Split({","c}))+""""))

strCsv.Split(vbcrlf.ToCharArray,StringSplitOptions.RemoveEmptyEntries) が1になります。

s.Split({","c})) が2になります。厳密には Select(Function(s) のくだりも含まれます。
sに1で分割した各要素が逐次入ります。

""""+String.Join(""",""",s.Split({","c}))+"""" の部分が3になります。
中央のs.Splitの部分は2です

文頭の String.Join(vbcrlf,..... が4になります。

1 Like

Yoichiさん、勉強になりました。どうもありがとうございます!

Yoichi様

度々申し訳ありませんがもう一点質問させてください。
最初の「A.csv」ファイルは、「A.xlsx」ファイルから名前を付けて保存で「CSV UTF-8(コンマ区切り」を選択して保存したもので、それを「B.csv」ファイルにする流れとなっています。
更なるプロセスとしては、「B.csv」を社内システムに取り込むことになっていますが、「B.csv」ファイルに対し、更に「utf-8 with BOM」のCSVファイルにしないといけないことが判りました。先ほど教えていただいた文の中に、「utf-8 with BOM」にする方法はありますでしょうか。

こんにちは

WriteTextFileアクティビティで書き込む際にエンコーディングプロパティで明示的に"UTF-8"を指定するとBOM付きにならないでしょうか?

Yoichi様

大変失礼いたしました。プロパティで設定できることだったですね。試してみます!

もしうまくいかないようであればInvokeMethodでWriteAllTextメソッドを以下の様に呼び出してみてください。

Yoichi様

お世話になっております。
昨日教えていただいた ReadTextFile→WriteTextFileで正常に変換することができました!
ありがとうございます!

1 Like

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