windntmd
(Windntmd)
April 18, 2023, 4:48am
1
お世話になっております。
「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を選択、スクリプト入力にチェックを入れてある状態です。
Yoichi
(Yoichi)
April 18, 2023, 4:54am
2
こんにちは
Powershellを使う理由は何かありますでしょうか?
UiPathの中で処理してしまった方が良くはないでしょうか?
1 Like
windntmd
(Windntmd)
April 18, 2023, 5:05am
3
Yoichiさん
お世話になっております。
UiPath内で処理できるのであれば一番いいと思っています。
やりたいことは、Excelファイルに入力したデータに対して、各セルをダブルクォーテーションで囲んだうえCSVファイル(UTF-8)に変換したいと思っています。単にUTF-8のCSVファイルに変換するだけであれば、名前を付けて保存のところで選択すればいいと思いますが、ダブルクォーテーションのところがどうすればつけられるのかが分からず、Powershellに至ったところであります。
Textファイルで見たイメージは以下の通りです。
Yoichi
(Yoichi)
April 18, 2023, 5:21am
4
こんにちは
上記はアウトプットでしょうか?
CSVの特殊文字が無いことが前提ですが、以下の式を試せますでしょうか?
strCsv = String.Join(vbcrlf,strCsv.Split(vbcrlf.ToCharArray,StringSplitOptions.RemoveEmptyEntries).Select(Function(s) """"+String.Join(""",""",s.Split({","c}))+""""))
1 Like
windntmd
(Windntmd)
April 18, 2023, 6:02am
5
Yoich 様
いただいた内容で修正してテストし、テキストファイルで確認するとダブルクォーテーションで囲まれて保存されていることが確認できました!
ありがとうございます。
ちなみに、教えてくださった文がどういう意味なのかを教えていただくことはできますでしょうか。
Yoichi
(Yoichi)
April 18, 2023, 6:11am
6
やっていることは、
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
windntmd
(Windntmd)
April 18, 2023, 6:54am
7
Yoichiさん、勉強になりました。どうもありがとうございます!
windntmd
(Windntmd)
April 18, 2023, 7:35am
8
Yoichi様
度々申し訳ありませんがもう一点質問させてください。
最初の「A.csv」ファイルは、「A.xlsx」ファイルから名前を付けて保存で「CSV UTF-8(コンマ区切り」を選択して保存したもので、それを「B.csv」ファイルにする流れとなっています。
更なるプロセスとしては、「B.csv」を社内システムに取り込むことになっていますが、「B.csv」ファイルに対し、更に「utf-8 with BOM」のCSVファイルにしないといけないことが判りました。先ほど教えていただいた文の中に、「utf-8 with BOM」にする方法はありますでしょうか。
Yoichi
(Yoichi)
April 18, 2023, 7:43am
9
こんにちは
WriteTextFileアクティビティで書き込む際にエンコーディングプロパティで明示的に"UTF-8"
を指定するとBOM付きにならないでしょうか?
windntmd
(Windntmd)
April 18, 2023, 7:55am
10
Yoichi様
大変失礼いたしました。プロパティで設定できることだったですね。試してみます!
Yoichi
(Yoichi)
April 18, 2023, 7:57am
11
もしうまくいかないようであればInvokeMethodでWriteAllTextメソッドを以下の様に呼び出してみてください。
windntmd
(Windntmd)
April 19, 2023, 8:04am
12
Yoichi様
お世話になっております。
昨日教えていただいた ReadTextFile→WriteTextFileで正常に変換することができました!
ありがとうございます!
1 Like
system
(system)
Closed
April 22, 2023, 8:04am
13
This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.