仕事で必要になったので、久々にコードを書くにはちょうどいいかも
と思い、WEBで調べつつ手軽なVBScriptで作成。
(VBScriptってトコがヘナチョコ感満載。でも、WSH使えるなぁ…)
[並び替え前のCSV] [並び替えた後のCSV]
1番目の項目 --------> 5番目
2番目の項目 --------> 4番目
3番目の項目 --------> 2番目
4番目の項目 --------> 1番目
5番目の項目 --------> 3番目
といった変換をするスクリプトです。
本当に久々にコードを書いたので、
カッコワルサとかその辺は勘弁してください。
ちなみに、これ作るのに2時間もかかりました…
細切れで空いた時間に作ったとはいえ、萎える…orz
-------------------------------------------
'---------------------------------------------------------------
' CSV変換スクリプト
'---------------------------------------------------------------
Option Explicit
' 引数(ドラッグアンドドロップしたファイル名)を取得
Dim objArgs
Set objArgs = WScript.Arguments
Dim strFileName
If objArgs.Count = 0 Then
strFileName = InputBox("変換したい CSV のファイル名をフルパスで入力してください。")
Else
strFileName = objArgs(0)
End If
'ファイル名が入力されなかったら終了
If strFileName = "" Then
WScript.Quit
End If
Dim objFS
'定数の定義
Const ForReading = 1,ForWriting = 2,ForAppending = 8
Set objFS = WScript.CreateObject("Scripting.FileSystemObject")
Dim objFileInput
Dim objFileOutput
Set objFileInput = objFS.OpenTextFile(strFileName, ForReading)
Set objFileOutput = objFS.CreateTextFile(strFileName & ".convert.csv", True)
Dim aryDestCols(4)
Dim strLine
Dim arySrcCols
Dim strCol
'ヘッダを書き出す場合はここで。
objFileOutput.Write _
"""1カラム目"",""2カラム目"",""さ~んカラム目""" & vbCrLf
Do Until objFileInput.AtEndOfStream
'変換元CSVを1行読み込む
strLine = objFileInput.ReadLine
'項目ごとに分解する
arySrcCols = Split(strLine, ",")
'マッピング通りに入れ替え
aryDestCols(0) = arySrcCols(3)
aryDestCols(1) = arySrcCols(2)
aryDestCols(2) = arySrcCols(4)
aryDestCols(3) = arySrcCols(1)
aryDestCols(4) = arySrcCols(0)
objFileOutput.Write Join(aryDestCols, ",") & vbCrLf
Loop
objFileOutput.Close
objFileInput.Close
2 件のコメント:
柏様
記事の内容、とても参考になりました。
メールソフトのアドレス帳を新システムへ移行する際、CSVの列並び替えを容易にするツールを探しておりました。よろしければ、職場の方にも紹介して利用させていただきたいと思っておりますがいかがでしょうか...
コメントありがとうございます!
私自身、懐かしくこの記事を振り返り「もっとコード部分を見やすく整形しておけば良かった…」と思いましたが^^;、ご参考いただけたようで幸いです。
もちろん、 公開している内容ですのでご自由に活用ください!
コメントを投稿