秀丸マクロ: TSVデータから特定列のみを取得する
TSVデータから特定列のみを取得
現在開いているTSVファイルのデータから、 特定列のデータのみを取得するプログラムです。
タブ区切りのTSVファイルやカンマ区切りのCSVファイルから 特定列のみを抽出したい場合に使えます。
実行例
TSVファイルに次のようなタブ区切りのデータがあるとします。
(便宜上テーブルで表現していますが、実際はタブ区切りです)
aaa | bbb | ccc |
ddd | eee | fff |
ggg | hhh | iii |
このTSVファイルを開いた状態で秀丸マクロプログラムを実行すると、 次のように特定列のデータのみを取得できます。(2列目を指定)
実行結果
bbb eee hhh
秀丸マクロ プログラム
コードは次の通りです。下で簡単な解説をしています。
// TSVデータの特定列のみを取得する // 取得する列数を指定 1列目: 0、2列目: 1 ... #COL_NUMBER = 1; // すべてを選択 selectall; // 選択範囲の文字列を取得(範囲選択を維持しない) $str = gettext(seltopx,seltopy,selendx,selendy); // 分割 #num = split($arr, $str, "\r\n"); #i = 0; while(#i <= #num){ // 空行は飛ばす if ($arr[#i] == "") { #i = #i + 1; continue; } // 行データをタブで分割 #num_col = split($arr_col, $arr[#i], "\t"); // 列データを取得 $s = $arr_col[#COL_NUMBER]; // 行いたい処理を記述 message $s; #i = #i + 1; }
コード解説
取得する列数を指定
次の部分で取得したい列数を指定します。
1列目を取得する場合は「0」、
2列目を取得する場合は「1」を指定してください。
// 取得する列数を指定 1列目: 0、2列目: 1 ... #COL_NUMBER = 1;
区切り文字を指定
下の部分で行データの区切り文字を指定しています。 もしカンマ区切りのCSVファイルの場合は「"\t"」の部分を 「","」に変更してください。
// 行データをタブで分割 #num_col = split($arr_col, $arr[#i], "\t");
プログラムの流れ
プログラムの全体的な流れはシンプルです。
- ファイル内容を読み取り、改行区切りで行データに分割する
- 行データをカンマ区切りで列データに分割する