- 締切済み
CSVファイル内の変更について
CSVファイルの操作でご相談です。 所定のフォルダに出力されるCSVファイルのデータが、例えば「1,2,3,4,5」という配列になっているものを、3番目と4番目の列を削除して「1,2,5」となるように、所定の列を位置の値を削除し上書き(もしくは別ファイルとして作成)したいのですが、何かやり方はございますでしょうか?(例:「赤,青,黄,黒,白」→「赤,青,白」) もしくはこのようなツールはございますでしょうか? できればこのフォルダを監視して、ファイルが作成され次第上記のような処理が自動でされれば一番ありがたいのです。もしくは都度バッチファイルのようなものを動かして上記のような動きになればありがたいです。 お知恵をいただきたく、よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- uneuneQ
- ベストアンサー率58% (38/65)
1.バッチファイル内、フォルダ3箇所設定の事。 2.起動すると、最小化される。 3.バッチファイルは無限ループ、止めるときは画面を表示させ、CTRL+Cで止めるか☓ボタンで。 4.バッチファイル中timeout値は監視間隔。小さくすればCPU負荷が上がり、大きくすればCPU負荷が下がる。現行10秒。 5.入力ファイルに同名のファイルがダブった時はバックアップフォルダ、出力フォルダは重ね書き。 @if not "%~0"=="%~dp0.\%~nx0" start /min cmd /c,"%~dp0.\%~nx0" %* & goto :eof @echo off setlocal ::入力(監視)フォルダ設定 set INPF=D:\work\inp ::バックアップフォルダ設定 set BAKF=D:\work\bak ::出力フォルダ設定 set OUTF=D:\work\out :loop if not exist %INPF%\*.csv ( timeout 10 > nul goto :loop ) for /f "usebackq delims=" %%i in (`dir /a-d /b "%INPF%\*.csv"`) do ( if exist "%OUTF%\%%~i" (del "%OUTF%\%%~i") type nul>"%OUTF%\%%~i" for /f "tokens=1,2,5* delims=," %%a in ('type "%INPF%\%%~i"') do ( if "%%d"=="" (echo %%a,%%b,%%c>>"%OUTF%\%%~i" ) else (echo %%a,%%b,%%c,%%d>>"%OUTF%\%%~i") ) move /y "%INPF%\%%~i" "%BAKF%\" echo "%INPF%\%%~i" %date%___%time%___処理済 ) goto :loop
- nda23
- ベストアンサー率54% (777/1415)
ファイルの入出力と正規表現を使用すれば可能です。 但し、物理環境が分からないので、具体例を示せません。 例えば、OSの違い(Windows/Unix/その他)、 組み込み方(バッチ実行か会話実行か)、 データの文字コード(SJIS/Unicode/UTF-8/その他)、 プログラムを前提とするなら、貴殿が理解できる言語 こういったものが不明です。
お礼
アドバイスいただきありがとうございました。もう少し勉強してみようと思います。
補足
uneuneQ様 とてもご丁寧にご教授いただきありがとうございました。感謝致します。動きのほうも確認できました。 ご説明がなく大変申し訳ございませんでしたが、実際に処理してみたかったCSV編集なのですが、24列の項目があるCSVファイルで、5列目、12列目、13列目、20列目の計4列を削除して、最終的には20列のcsvとしたかったです。 ご教授いただいた構文【多分この辺りでしょうか→for /f "tokens=1,2,5* delims=】を自分なりに編集してみたのですが、私の知識レベルではうまくいかず。もし可能であればこの編集部分だけでも今一度ご教授いただければありがたいです。