yuichon
(yuichon)
December 4, 2020, 3:38pm
1
DataTableを「CSVに書き込む」(エンコーディング指定無し)でCSVファイルを作成すると、UTF8 BOM 付き、CRLFのCSVが書き出されると思います。
このCSVファイルをUiPathのみで、UTF-8 BOM無し LF という形式のCSVに変換する方法はございますでしょうか。
出来ない場合、テキストエディタでCSVファイルを開いて変換する方法になるのかな、、と考えていますが、できれば避けたいと考えております。
ご存じの方がいらっしゃいましたらご教示いただけますと幸いです。
#初めての投稿のため、何か不備がございましたらご指摘いただけますと幸いです。
HANACCHI
(はなっち!UiPath Japan MVP 2019-2022)
December 4, 2020, 3:56pm
2
rowを配列にして、string.joinでカンマで連結してその末尾にLFを付す。それを繰り返して、string型変数に格納。それをテキストファイルに書き出す…
か、
CSVを一度テキストファイルを読み込んで、.replaceでCRをstring.emptyに置換し、テキストファイルに書き出す…
とか
shinji
(Shinji Miyagi / みやぎ)
December 5, 2020, 3:13am
3
BOMなしUTF8、改行コードLFのCSVをInvokeCodeで作ったことがあります。
StreamWriterの生成時にOption指定で「BomなしUTF8」にして
'Dim sw As New System.IO.StreamWriter(filePath, False, System.Text.Encoding.UTF8) '// BomありUTF8
Dim sw As New System.IO.StreamWriter(filePath, False) '// BomなしUTF8
データ出力時に、改行コードを指定すればOKです。
'sw.Write(Environment.NewLine) '// 改行コード:CRLF指定(Windows標準)
sw.Write(ControlChars.Lf) '// 改行コード:LF指定
下記のようにすれば、標準アクティビティでは確かできない「値をダブルコーテーションで囲む」事もできます
'// ダブルクォーテーションをシングルクォーテーションに変換(エスケープ)し
wk = row(dt_Output.Columns(i).ColumnName).ToString.Replace(Chr(34), "'")
'// ダブルクォーテーション(Chr(34))で囲む
wk = Chr(34) & wk & Chr(34)
If dt_Output.Columns.Count-1 > i Then
wk = wk & ","c
End If
sw.Write(wk)
ニッチですが使う人もいそうなので、どこかでxamlを公開しようかなと思います。
1 Like
yuichon
(yuichon)
December 5, 2020, 8:15am
4
HANACCHI さま、ありがとうございます。
テキストファイルで取り扱うという視点はありませんでした。どちらの方法も私でもなんとなくイメージが付きましたので、チャレンジできそうです。
一旦の回答で恐縮ですが、どうぞよろしくお願いいたします。
yuichon
(yuichon)
December 5, 2020, 8:40am
5
shinji さま、ありがとうございます。
非常にスマートに実装できそうな方法ですが、恥ずかしながらVB.NET (?)の知識が乏しく理解しきることができませんでした。
いただきました1つ目のコードをInvokeCodeにいれて、空のCSV UFT-8 BOM無し CRLF ファイルが生成されることは確認できました。
2つ目のコード自体が出力の事なのかと思いましたが、任意のデータテーブルを書き込みつつ、改行コードを指定する方法(dt_Output挿入位置、加えて、宣言等が必要なのか)が、わかりませんでした。。
3つ目のコードについて、今回は"「値をダブルコーテーションで囲む」"は使いませんが、既存の手出しできないのシステム・プログラム等に対してRPAで何かするとなった場合に、活用させていただきたい場面は多そうです。
xamlファイルを公開されましたら、是非活用させていただきたいと思います。
お手すきで、再度コメントいただけますと大変ありがたく思います。
どうぞよろしくお願いいたします。
shinji
(Shinji Miyagi / みやぎ)
December 5, 2020, 2:10pm
6
サンプルxamlファイルを作成したので、こちらを「ワークフローアクティビティを呼び出し」で実行してください。
使用方法ですが、引数は下記のようになっています。
io_dt_input:対象のデータテーブル(CSVに出力したいデータテーブル)
in_outputFIlePath:出力ファイルパス
in_setBomAndCrlf:Bom付きCrlf改行で出力するか(今回はBOM無し LFなので、Falseを指定)
in_delimitWithDoubleQuote:ダブルコーテーションで値を区切るか(今回は使用しないということなのでFalse)
データテーブルをCSVファイルに出力.xaml (9.5 KB)
2 Likes
yuichon
(yuichon)
December 6, 2020, 9:22am
7
shinji さま
xamlファイル、まことにありがとうございました。
ダウンロードさせていただき、実行したところ期待通りの出力結果となりました。
#「ワークフローアクティビティを呼び出し」も今回初めて知りました。勉強させていただきます。
いただいたInvokeCodeは、True/Falseで出力切り替え機能まで備えており、非常に使い勝手も良さそうす。他のケースでも利用させていただきます。
この度は大変貴重なxamlファイルを公開いただき、感謝申し上げます。
素早いご回答いただいたことも含めまして、本当にありがとうございました。
system
(system)
Closed
December 9, 2020, 9:22am
8
This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.