CSV形式索引のフォーマット変換
前回までのあらすじ。
PDFIndexViewerを作って、それなりに使えることに満足した akiyuki。
しかし肝心の AL2のCSV形式索引をそのまま使用することが出来ず、さらなるひと手間が必要になるのだった。
というのも。提供フォーマットは
名称,読み,『書籍』,頁1,頁2,頁3,頁4,頁5,発売日
で、以下の様に、同一用語に対して、複数参照ページがあったり
FS判定管理シート,FSはんていかんりシート,『ALA』,31,202,,,,2012/9/20
以下の様に、複数の書籍に、同一用語がある場合は2行になったり、
FC社,FCしゃ,『AL2』,303,,,,,2012/8/10
FC社,FCしゃ,『ALA』,125,,,,,2012/9/20
で、1用語に対する参照ページのデータが散逸しているため、プログラムで処理するには、ちょっと処理が面倒だし、個人的に気持ち悪いフォーマットなのです。
なので
#名称,読み,頁
とフォーマットを変換するVBScriptをちょろっと書いてみました。
convert.vbs
Option Explicit ' AL2インデックスフォーマット変換 ' ' 使い方:al2_dgidx.csvと本ファイルを同一フォルダにおいて、本ファイルを実行(ダブルクリック) Dim objFSO Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") If Err.Number <> 0 Then WScript.Echo "エラー: " & Err.Description WScript.Quit End If Dim objFileInput Set objFileInput = objFSO.OpenTextFile("al2_dgidx.csv") If Err.Number <> 0 Then WScript.Echo "ファイルオープンエラー: " & Err.Description WScript.Quit End If Dim objFileOutput Set objFileOutput = objFSO.OpenTextFile("AL2Index.csv", 2, True) If Err.Number <> 0 Then WScript.Echo "ファイルオープンエラー: " & Err.Description WScript.Quit End If objFileOutput.WriteLine( "#名称,読み,頁 ※文字コードをUTF-8に変換すること" ) 'ヘッダーを出力 Dim isFirst : isFirst = true Dim aryReadLine Dim i 'ループカウンタ Do While objFileInput.AtEndOfStream <> True aryReadLine = Split(objFileInput.ReadLine, ",") '一行読み込んで、カンマ区切り If isFirst = false And Len(aryReadLine(2)) <> 0 Then '先頭行、および『書籍』未設定の場合は読み飛ばす For i=3 To 7 If Len(aryReadLine(i)) <> 0 Then '「名称、読み、書籍+頁n」を出力 objFileOutput.WriteLine( aryReadLine(0) & "," & aryReadLine(1) & "," & aryReadLine(2) & " " & aryReadLine(i) ) End If Next End If isFirst = false Loop objFileOutput.Close objFileInput.Close Set objFileOutput = Nothing Set objFileInput = Nothing Set objFSO = Nothing WScript.Echo "変換終了" WScript.Quit
ちなみに Windowsマシンでちょっとしたファイル整形を行なう場合に、VBScriptは便利です。というのも PerlやPHP, Rubyのようにアプリをインストールせずに、メモ帳のみで処理できるからです。
そんなこんなで。AL2の索引も PDFIndexViewerで処理できるようなったので、
を更新してみました。そんな感じで。