オフィスソフトを立ち上げずに処理したい
きっかけは「いちいちオフィスソフトを立ち上げて処理するのが手間だな」って思ったことでした。大した時間の省略ではないんですが、変換するだけならそんなに複雑じゃないだろうから自分でプログラム作っちゃえって感じで。
TSVをCSVにするとはどういうことか
今回の場合はTSV形式になっているファイルをCSV形式のファイルとして出力するのが目的。ちなみに「TSVとは」で検索してみると
TSVとは、複数の項目で構成されるデータを複数件列挙して表現することができる汎用的なデータ形式の一つで、項目間の区切り文字にタブ文字を用いるもの。
CSVは以下の感じ
comma-separated values(略称:CSV)は、いくつかのフィールド(項目)を区切り文字であるカンマ「 , 」で区切ったテキストデータおよびテキストファイル。
ざっくり書くとタブ区切りをカンマ区切りに変換するプログラムになります。
プログラムの流れを考える
流れとしては
- ファイルを読み込むダイヤログを表示(読み込まない場合はプログラム終了)
- ファイルの場所を取得
- 実際にファイルを読み込み、タブをカンマに変換する
- 変換したらファイル名に変換した証拠の文字列を追加してcsvとして保存
こんな感じでしょうか。
ファイルの読み書きも手軽なHSP
ファイルの読み書きも手軽に実装できちゃいます。命令としてはdialogとnoteloadを使います。以下、HSP Document Libraryより引用。
dialog ダイヤログを開く
windowsの標準的な各種ダイヤログボックスを画面に表示します。noteload 対象バッファ読み込み
指定したファイルをメモリノートパッド命令のバッファに読み込みます。
詳しい使い方は命令リファレンスを参照してみてください。
実際にプログラミング!
ファイルの読み込みダイアログ
まず、ファイルを読み込むダイアログは次の一文で実装完了。簡単です。
dialog "tsv|csv",16,"tsvファイル|csvファイル"
これが実行すると「開く」のダイヤログが表示されます。ここでキャンセルを押すとstatに0が返るのでそれをif文にて判定し、0の場合はプログラムを終了させます。
if stat=0 : end
ファイルの場所やファイル名を取得
次にファイルの場所を取得します。実はdialogによってファイルを選んで「開く」をクリックするとrefstrにそのファイルの場所+ファイル名が格納されます。なので、それをこちらで用意した変数に格納しておきます。
fullpath = refstr
さらに、ここからファイル名のみを取り除いてファイルの場所を取得。それにはgetpathという命令にて処理可能。
dirpath = getpath(fullpath,32)
ファイル名の取得も同じgetpathでできちゃいます。
filename = getpath(fullpath,8+1)
ちなみにgetpathで使われている数字の意味は(リファレンスより抜粋)
- 0 : 文字列のコピー(操作なし)
- 1 : 拡張子を除くファイル名
- 2 : 拡張子のみ
- 8 : ディレクトリ情報を取り除く
- 16 : 文字列を小文字に変換する
- 32 : ディレクトリ情報のみ
となってます。
ファイルの読み込み実装~noteload
ファイルの読み込みの実装に進みます。読み込みのnoteloadした内容を保管しておく入れ物を用意してからnoteloadを実行します。
notesel a noteload refstr
これもたった2行で実装完了。
今回の核 タブ→カンマに変換部分の実装
次にaに入っている内容のタブ区切りをカンマ区切りに変換します。ここではstrrepを使用。\tはタブの意味、それを,に変換しています。
strrep a,"\t",","
これで今回のプログラムの核は完了。たったこれだけで変換完了です。滞りなく実行されると思いますが、ここに念のためウェイトを入れておきたいと思います。
await 1
ファイルの保存
あとは変換した内容を保存してあげるだけ。
notesave dirpath+filename+"_h.csv"
最後にnoteselにて確保していたメモリを開放するための命令を書いて終わりです。
noteunsel
プログラム完成!!
これで全てのスクリプトが出そろいました。たった11行で完成です。
//TSV→CSV変換プログラム dialog "tsv|csv",16,"tsvファイル|csvファイル" if stat=0 : end fullpath = refstr dirpath = getpath(fullpath,32) filename = getpath(fullpath,8+1) notesel a noteload refstr strrep a,"\t","," await 1 notesave dirpath+filename+"_h.csv" noteunsel
ちょっとしたものも軽減化できる
今回はTSV→CSV変換プログラムを書いてみました。こうしたちょっとした作業もプログラムで負担軽減になったりしますよ。それだけで時間と心に余裕ができます。