秀丸マクロ: TSVデータから特定列のみを取得する

TSVデータから特定列のみを取得

現在開いているTSVファイルのデータから、 特定列のデータのみを取得するプログラムです。

タブ区切りのTSVファイルやカンマ区切りのCSVファイルから 特定列のみを抽出したい場合に使えます。

実行例

TSVファイルに次のようなタブ区切りのデータがあるとします。
(便宜上テーブルで表現していますが、実際はタブ区切りです)

aaabbbccc
dddeeefff
ggghhhiii

この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");

プログラムの流れ

プログラムの全体的な流れはシンプルです。

  • ファイル内容を読み取り、改行区切りで行データに分割する
  • 行データをカンマ区切りで列データに分割する