以前BizRobo!のコミュニティで回答したものなのですが、なかなか良い題材だと思いましたので紹介します。
相談内容
ご相談内容の概要は以下の通りです。
CSVファイルの不要な列を削除する方法を知りたい。
例: 1〜26列目は残し、それ以降の列を削除したい。
BizRobo!上でCSVファイルからExcelファイルの変換を行うと、
かなり時間がかかりそうだったため断念した。
対象のCSVファイル情報:
- 列数:50
- 行数:14,989
相談内容についての補足
前提として、BizRobo!の標準機能では、CSVファイルをExcelファイルに直接変換することはできません。
CSVを1行ずつ読み取って変数に格納し、Excelに入力する方法もありますが、このデータ量では非効率です。
どうしても実施する場合は、VBAや他のツールを活用する方が良いでしょう。
また、BizRobo!の機能を使って正規表現やJavaScriptで処理する方法も考えられます。
しかし、BizRobo!ではCSVファイルの内容をアプリケーション内のメモリに読み込んで処理するため、大きなファイルを扱う場合は避けた方が無難です。
指定列以降の削除方法
結論: PowerShellを使用し、正規表現を使って必要な列を抽出するのが効率的です。
以下のPowerShellコマンドを実行すると、26列目までを残した新しいCSVファイルを作成できます。
(Get-Content [inputファイル名]) -replace '^((?:[^,]*,){25}[^,]*).*$', '$1' | Set-Content [outputファイル名]
それぞれやっていることを分解すると以下の通りです。
コマンドの解説
コード | 説明 |
---|---|
(?:[^,]*,) |
カンマで区切られたデータを取得 |
{25} |
上記を25回繰り返す(1〜25列目) |
[^,]* |
26列目のデータ |
.*$ |
27列目以降のすべて |
'$1' |
26列目までを保持し、それ以降を削除 |
Get-Content |
CSVファイルをテキストとして取得 |
Set-Content |
変更後のデータを保存 |
このPowershellコマンドを「ps1」拡張子の実行ファイルにしておき、コマンドラインから実行できるようにすればロボットからでも利用しやすいでしょう。
コマンド実行時の注意点:
実行ポリシーによってPowerShellスクリプトが実行できない場合は、以下のようにオプションを指定して実行してください。
powershell -ExecutionPolicy RemoteSigned -File [ps1ファイル]
まとめ
- BizRobo!単体ではCSVファイルの不要な列を削除するのが難しい
- PowerShellを使えば、簡単かつ効率的に特定の列以降を削除できる
- ロボットでの実行も可能なため、BizRobo!と組み合わせて活用できる
参考リンク:Design StudioでPowerShellを使用する方法
ちなみに、このまとめはAIで生成させてみました。
全体の文章推敲については、ほとんど私が書いたままでしたが、コマンドの解説等Markdown記法の部分は良い感じにして見やすくしてくれました。