• ベストアンサー

CSVファイルのバッチまたはVBでの編集

バッチおよびVBのドがつくほどの初心者です。 環境:Windows7 Pro 下記のような行が数百行ほど記載されているCSVファイル(xyz.csv)があります。 "(桁数不定の変数a)-(1桁の変数b)(1桁の変数c)","yyyymm" これをバッチまたはVBにて (1桁の変数b),(桁数不定の変数a),(1桁の変数c),yyyymm に自動的に変更したいと考えています。 例 "1234567890-12","201409" ↓ 1,1234567890,2,201409 「-」を「,」に変更したり「"」の削除、また桁数が不定でなければ指定の位置に「,」を入れることは出来そうなのですが 桁数が不定ということで、行き詰ってしまいました。 システム上 "(a)-(b)(c)","yyyymm"を "(a)-(b)(c)","(a)-(b)(c)","(a)-(b)(c)","yyyymm" に変更することは出来そうなので、先頭から検索して「-」の個数と位置で指定の文字列を消すという方法もあるのかなと思ったのですが こちらについてもやり方がまったくわからなくお手上げ状態になってしまいました。 (桁数固定なら、こちらで指定の位置だけ削除できればと思っていたのですが……) 上記処理を行えるバッチまたはVBで編集するコマンドをご教示いただければと思います。 ご回答お願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4848/10261)
回答No.1

バッチで、 @echo off (for /f "tokens=1,2 delims=," %%A in (input.txt) do call :sub %%A %%B)>out.txt goto :EOF :sub for /f "tokens=1,2 delims=-" %%C in ("%~1") do set C=%%C&set D=%%D echo %D:~0,1%,%C%,%D:~1,1%,%~2 goto :EOF

snin1107
質問者

お礼

今更のお礼で申し訳ありません。 (お礼をしたつもりになっておりました……すいません) 頂戴した内容で問題なく動作しました! ありがとうございます!

関連するQ&A

  • CSV編集について(VB6)

    VB6初心者です。 例として下記のCSVファイルがあります。 a,1,2,3,4,5,b,1,2,3,4,5,6,c,1,2,3,c,1,2,3,c,1,2,3,c1,2,3 a,1,2,3,4,5,b,1,2,3,4,5,6,b,1,2,3,4,5,6,c,1,2,3,c,1,2,3,c,1,2,3,c,1,2,3,c,1,2,3c,1,2,3 上記を下記のように編集して別のCSVへ保存をしたのですがご教授ください。 a,1,2,3,4,5 b,1,2,3,4,5,6 c,1,2,3 c,1,2,3 c,1,2,3 c,1,2,3 a,1,2,3,4,5 b,1,2,3,4,5,6 b,1,2,3,4,5,6 c,1,2,3 c,1,2,3 c,1,2,3 c,1,2,3 c,1,2,3 c,1,2,3 上記の各a,b,c内の項目数は固定です。 a以降のb,c内の配列はランダムに複数となります。

  • バッチでcsvファイルの指定のカラムを編集したい

    バッチでファイルの編集をしたい バッチファイルを使用して、csvファイルの読み込み~編集を行いたいと思っております 元ファイル:TEST_DATA.csv 内容: 111,222,333,444,555 123,456,789,321,987 上記のcsvファイルを読み込み、 ・5カラム目が987ならば3カラム目を654に変更する という処理を実行させたいのですが、 どのように行えばよいのでしょうか? 現在考えていることは、 1.for文を使用して指定のカラムを抜く(3カラム目と5カラム目を抜く)) 2.5カラム目の値をif条件に指定し、合致した場合、抜いた3カラム目の変数に654を入れる 3.654に変更した変数を3カラム目の値として入れる という順番で行えばいいと思っているのですが、 下記まで行ったところで行き詰ってしまいました for /F "tokens=3,5 delims=," %%i IN (TEST_DATA.csv) DO @(if %%j==987 set %%i=654 echo %i %j ) お分かりになられる方、ご教授願えませんでしょうか

  • vb.netでCSVファイルを変換して新しいCSVファイルを作りたいの

    vb.netでCSVファイルを変換して新しいCSVファイルを作りたいのですが、どのようにすれば良いかヒントを教えていただけないでしょうか? A組,10代,10 A組,20代,20 A組,30代,30 B組,10代,40 B組,20代,50 B組,30代,60 C組,10代,70 C組,30代,80 この様なCSVファイルを変換して ,A組,B組,C組 10代,10,40,70 20代,20,50, 30代,30,60,80 という表のようなCSVファイルを作りたいのです。 データベースなどに入れずに、ファイルtoファイルでの変換がしたいです。 最初のファイルの1列目と2列目の項目をそれぞれ配列に入れて重複をなくす位までは思いつくのですが、そこから先がどの様にすれば良いかよく分かりません。 ヒントだけでも良いのでよろしくお願いいたします。

  • バッチファイルで

    バッチファイルでファイル名をキーボードで変更するのは どうすればよいのでしょうか 例:A.txtと言うファイル名をキーボードから2006data.txtにしたいのですが REN C:\A.txt 2006data.txt はわかるのですが2006.txtを変数にして その変数をキーボードで入力する方法(今更バッチファイルでもないのですが?) よろしくお願いします。

  • VBスクリプトでcsvファイルを比較

    別々のCSVファイルがありますが同じ形式にしておいて、 a.csv a,b,c b.csv d,e,f aとd、bとe、cとfと順番に比較する方法を教えて頂けますでしょうか。

  • VBでデータベース取り込み用のバッチ

    こんにちは。VBを学習しています。 Formにbuttonを配置して、buttonを押すと指定されたパスにあるCSVを読み取り、データベースに取り込むプログラムを書きました。 ここで、buttonを押さずに、定期的な時間になったらデータベースに取り込むようなことをしたいと思います。 考えたのが、PowerShell等のスクリプトでデータベースに取り込む用のプログラムを書き、タスクスケジューラーで時間を指定するというものです。これは努力すればできそうな気がします。 これとは別に、VB上でバッチみたいなものを書いて、それを所定の時間に実行させるみたいな事はできるのでしょうか?

  • 特定文字列の抽出

    VB6の質問です。 桁数、データが不定の文字列中から特定文字を抽出したいのでが、方法を教えていただけないでしょうか? 抽出したいデータの桁数が毎回不定でMid, Left, Right関数が使用できません。 Dim Buffer As String Buffer = "A12345...B678910.TRAGET..C" '桁数、データが不定の文字列がBufferに入ります。 例えば、変数Bufferから、桁数を考慮しないで"TARGET"の文字列を抽出したのです。 InStr関数で、位置を特定して、Mid関数などで抽出するれば、良いと思うのですが これをどんな桁数のときも対応できるようにルーチン化にできないでしょうか?

  • CSVファイル操作

    VBでCSVを操作しているのですが、わからないことがあるので教えてください。 1.CSVファイル(改行区切り)のレコード数を取得するにはどうすればいいですか? 2.CSVファイル(改行区切り)の最初のレコードのみ削除するにはどうすればいいですか?   また、レコードを指定して削除することはできますか? 3.CSVファイル(改行区切り)のレコードを指定して内容を変更することはできますか? Windows XP , VB6

  • バッチファイルにおける環境変数分の繰り返し処理

    こんにちは。 現在、CSVから読み込んだ値(ファイル名)を環境変数に格納し、その環境変数に合致したファイルの移動を行う。というバッチファイルを作成しています。 作成にあたってCSVからのファイル名の読み込み及び、環境変数に全てのファイル名を1個ずつ格納する事(a1=AAやa2=BBなど)には成功したのですが、その後のファイルを移動するコマンドが上手く書けません。 ちなみに move "*%a1%*.txt" "C:\" move "*%a2%*.txt" "C:\" 上記のように1個ずつ手動で環境変数を指定しての移動は出来るのですが、その日によって 取得するファイル名(環境変数の数)が異なってくる為、可能であれば自動で環境変数の数を取得し環境変数分、1個ずつ環境変数からファイル名を読み込み、そのファイルを移動させる。と言ったバッチを組みたいのです。 よろしくお願い致します。 ------------------------------------------------------------------ set count=1 for /f %%i in (test.csv) do @call :add %%i goto PROCESS1 :add set a%count%=%1 set /A count+=1 goto :EOF :PROCESS1 ※移動するコマンド ------------------------------------------------------------------

  • CSV書込みの際、カンマで位置がずれる

    VB.NET初心者です 変数に必要なデータを入れて、それをCSVに書き込もうとしているのですが、 データの中にカンマを含むものが存在して、 エクセルで開くと本来1セルでよいところが、2セル使って 他の行と比べるとずれてしまいます たとえば、A~Eを変数として A=あ B=い,い C=う D=え E=お というデータがあって、それをA,B,C,D,Eの順に 横一列でCSVにした場合 「あ い,い う え お」 と5列にしたいところが、 「あ い い う え お」 と6列になってしまうのです。 これはどのように解決すればよいでしょうか? どうかご教授願います。 [開発環境] WinXPPRO/VB.NET2003/Excel2000

専門家に質問してみよう