• 締切済み

CSVファイル内の変更について

CSVファイルの操作でご相談です。 所定のフォルダに出力されるCSVファイルのデータが、例えば「1,2,3,4,5」という配列になっているものを、3番目と4番目の列を削除して「1,2,5」となるように、所定の列を位置の値を削除し上書き(もしくは別ファイルとして作成)したいのですが、何かやり方はございますでしょうか?(例:「赤,青,黄,黒,白」→「赤,青,白」) もしくはこのようなツールはございますでしょうか? できればこのフォルダを監視して、ファイルが作成され次第上記のような処理が自動でされれば一番ありがたいのです。もしくは都度バッチファイルのようなものを動かして上記のような動きになればありがたいです。 お知恵をいただきたく、よろしくお願いします。

みんなの回答

  • uneuneQ
  • ベストアンサー率58% (38/65)
回答No.2

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

yasp0507
質問者

補足

uneuneQ様 とてもご丁寧にご教授いただきありがとうございました。感謝致します。動きのほうも確認できました。 ご説明がなく大変申し訳ございませんでしたが、実際に処理してみたかったCSV編集なのですが、24列の項目があるCSVファイルで、5列目、12列目、13列目、20列目の計4列を削除して、最終的には20列のcsvとしたかったです。 ご教授いただいた構文【多分この辺りでしょうか→for /f "tokens=1,2,5* delims=】を自分なりに編集してみたのですが、私の知識レベルではうまくいかず。もし可能であればこの編集部分だけでも今一度ご教授いただければありがたいです。

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

ファイルの入出力と正規表現を使用すれば可能です。 但し、物理環境が分からないので、具体例を示せません。 例えば、OSの違い(Windows/Unix/その他)、 組み込み方(バッチ実行か会話実行か)、 データの文字コード(SJIS/Unicode/UTF-8/その他)、 プログラムを前提とするなら、貴殿が理解できる言語 こういったものが不明です。

yasp0507
質問者

お礼

アドバイスいただきありがとうございました。もう少し勉強してみようと思います。

関連するQ&A

  • バッチファイルで出来る事

    バッチファイルでcsvファイルの加工(列の削除、オートフィル等)は できるのでしょうか? バッチファイル作成の初心者ですので、お手柔らかに。

  • バッチ処理でCSVファイルコピーした後の記号削除方法

    こんにちは。バッチ処理作成初心者です。 Windows XP、エクセル2000 を使用しています。 複数のcsvファイルをバッチ処理(下記)でコピーしました。 copy /y aaa.csv+bbb.csv ccc.csv (結合させるcsvファイルは最大6つありますが、 上記コマンドでは2つのcsvファイルを結合させてます。) コピーしたcsvファイル「ccc」を開くと、必ず最終行A列に "・"という記号が現れます。 この記号を、「ccc」を開かずに削除する方法 もしくは、csvファイルをコピーしても記号が現れない方法を 教えてください。 (「ccc」は行数が最大で18万行を超えるため、いつも ファイルを開いて記号を削除することができません。)

  • 再起動しないとcsvファイルの変更ができない…

    デスクトップにcsvファイルがあり、 その内容を変更し、上書き保存しようとすると "ファイルC:Document and Setting\山田太郎\a.csvを作成できません。パスおよびファイル名が正しいか確認してください" というエラーが出てきて変更内容を上書きできないという現象が多々あります このような状況はPCを再起動すると問題なく上書きできるようになります 何故このような現象が起きるのでしょうか? また、解決法はあるのでしょうか? よろしくお願いします

  • ファイルの作成日で動作するバッチ(その2)

    下記のような動作をするバッチを作成したいと思っております。 環境はWindows Server 2008 R2です。 とあるフォルダ「A」があります。 「A」の下には「work」というフォルダと、ランダムな文字列のフォルダが生成されます。 ランダムな文字列のフォルダの下には「xxx.pdf」「xxx.csv」が生成されます。 (xxxにもランダムな文字列が入ります。フォルダとファイルの文字列は別です) 毎日1回バッチファイルを動作させ「A」の配下にあるランダムなフォルダの中にある「xxx.pdf」「xxx.csv」を 別のフォルダ「B」に移動させたいと思っています。 この際にランダムな文字列のフォルダは削除し、ファイルだけを移動させたいです。 また、移動させるファイルの条件として「xxx.pdf」「xxx.csv」のファイル生成日が 24時間以内であることとしたいです。 つまりファイル生成されてから24時間以上経過した「xxx.pdf」「xxx.csv」は処理の対象外になります。(「xxx.pdf」「xxx.csv」を格納しているフォルダもそのまま) また「work」フォルダおよび「work」フォルダ配下のファイルも処理の対象外としたいです。 過去の質問で回答をいただけたのですが下記部分が動作をしておりません。 過去質問:http://okwave.jp/qa/q9185333.html 未動作:対象のファイルが格納されているランダムな文字列のフォルダは削除し、ファイルだけを移動させる。 上記バッチファイルから未動作部分の実装についてご教示いただけますでしょうか?

  • csvファイルを結合するバッチファイル作成方法

    こんにちは。 フォルダ名cccの中にある2つのcsvファイル、sheet1とsheet2を 結合してketsugoというcsvファイルつくるために、 バッチファイルを作成しようとしています。 (sheet1とsheet2のcsvファイルは4万行前後/シートで、 今後結合させるファイル数を増やす予定です。 手作業では難しいと思い、バッチ処理を検討中です。) C:\aaa\My Douments\ccc>copy /y sheet1.csv+sheet2.csv ketsugo.csv というコマンドが、コマンドプロンプト上で実行できます。 (aaaやcccはファイル略称で、漢字や半角スペース含む) 次にウィンドウズのメモ帳を開き、同じコマンドを入力し、 拡張子.batのバッチファイルを作りました。 作成したバッチファイルを開いてコマンドを実行させようと しましたが、容量ゼロの、アプリケーションを選択させる ファイルしかできません。コマンドの中に半角スペースを含む ファイル名がある場合は、""でくくるルールがあるそうですが、 実際に上記のコマンドのどこからどこまでを""でくくったら よいかわかりません。その他にも不備な点がありましたら 改善方法を教えていただきたいと思います。 よろしくお願いします。

  • テキストファイル(CSV)の3行目以降を削除バッチ

    数百あるテキストファイル(CSVファイル)に対し、 コマンドプロンプトでバッチ処理をして 3行目以降のデータをすべて削除したいです。 ネット検索しても探しだせず、どなたかお詳しい方、ご教授願います。 初心者なので、コマンドや専門的な用語等わかりませんが、 コピペして使えるような例文があるとありがたいです。 ※対象ファイルは指定のフォルダに集められた状態です ※上書きでも、別フォルダに新規ファイルができてもどちらでも大丈夫です ※それぞれのファイルで3行目以降の行数はことなります。

  • あるフォルダ内のすべての.CSVファイルをコピーして貼り付けるようなプログラム

    たとえばあるフォルダ内にある.CSVのファイルの中身のデータを 新しく一つのエクセルファイルを開き、sheet1にフォルダ内にある全ての.CSVファイルをコピーして貼り付ける様なことは可能ですか? たとえばsheet1に一つ目の.CSVファイのコピーが終わると、 その続きから二番目の.CSVファイルをコピー、 次は三番目の.CSVファイルをコピー貼り付け みたいにしたいのです。 データは 一列目が時刻データで二列目が五桁の数字です。 このサイト見ればいいよ!とかこういう感じのプログラムでできますよ! というのがあればご教授お願いします。

  • バッチファイルの作り方(CSV→タブ区切り)

    CSVファイルをタブ区切りにする手順は ツールーバーの 【データ】→【区切り位置】→カンマ、タブ などの設定で出来ると思います。 その手順を何度も繰り返すのが面倒なため、 バッチファイルを作成しようと考えています。 やりたい事としまして、 (1) .csvファイルをコマンドプロンプトに入れる(ドラックドロップ) (2) カンマ区切り→タブ区切りに変換し、上書き保存 ということをコマンドプロンプト(バッチファイル)で行いたいです。 関数としては for /f を使うのだと思うのですが、 よく分からないため教えていただきたいです。 宜しくお願いいたします。

  • バッチファイル作成方法

    バッチファイルを作成してファイルの結合(csvファイル)を行おうとしています。 ですが下記のような状況になってしまいどうにかならないかと思っています。 ***1.csv ***2.csv ***3.csv ***1.csv というような順番でデータがフォルダに転送されきてしまいます。 「1,2,3」までならば結合のバッチファイル作成が可能なのですが、 「1,2,3」の後に再度「1」のファイルが同フォルダにきた時には どのような文にすればイイのかお教え頂けますでしょうか。 下記に結合の文を記させて頂きます。 copy ***1.CSV+***2.CSV+***3.CSV+***_ADDALL.CSV d:\***\***_ALL.CSV 初めてバッチファイルというものを作成するので不明な点が多いのですが、宜しくお願い致します。

  • VB2010でCSVファイルを読み、配列に入れる

    ExcelVBAで、フォルダを選択しCSVファイルを表示⇒クリックで対象ファイルを選び配列に入れる次のプログラムを作りました。その後でデータを加工しグラフィック化してるのですが、VBAのグラフィック機能が遅いのでVB2010に変えようと思いいろいろやってみたのですが、どうもうまくいきません。 どなたか、VB2010ではどのようなプログラムになるのか、教えていただけないでしょうか。 'Excel VBA---------------------------------------- Sub CSVデータ() Dim xd(1000),yd(1000) 'フォルダを選ぶ ChDir ThisWorkbook.Path 'CSVファイルの一覧 pname = _ Application.GetOpenFilename(FileFilter:="CSVファイル(*.csv),*.csv" _ , FilterIndex:=1,Title:="開く",MultiSelect:=False) '対象ファイルをクリックで選ぶ If pname <> False Then Workbooks.Open Filename:=pname End If fname = ActiveWorkbook.Name 'CsVファイルのセルから配列へ移す nstart = 6 nend = nstart +500 k = 0 For i = nstart To nend '6行目から500行の2列、3列を読み配列に入れる k = k + 1 xd(k) = Cells(i, 2) yd(k) = Cells(i, 3) Next i End Sub

専門家に質問してみよう