秀丸マクロ: 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");
プログラムの流れ
プログラムの全体的な流れはシンプルです。
- ファイル内容を読み取り、改行区切りで行データに分割する
- 行データをカンマ区切りで列データに分割する