# 第III部〜秀丸マクロのいろはにほへと
CSV/TSVモード

## CSV/TSVモード

- はじめに
- 補足

### はじめに

CSV/TSVモードで使うマクロの例です

#### 関連キーワード

tabcolumn
  カーソルがどの位置(列)に含まれるかを表す。（Ver.8.88以降） forwardtab、backtabの数え方に対応。
tabcolumnmax
  tabcolumn の数え方で、現在のテキスト内容から得られる最大の値(最大列数)。(Ver.8.98以降)

#### 関連する文、関数

forwardtab
  タブ区切り/カンマ区切りの次の位置にジャンプします。
backtab
  タブ区切り/カンマ区切りの前の位置にジャンプします。
selectcolumn
  タブストップまたはTSV/CSVモードの選択を行います。（Ver.8.30以降）
getconfig
  "TabMode"で設定を取得。
config
  "xTabMode"で、CSV/TSVモードに変更する。

#### CSV/TSVモードの判定及び切替

CSV/TSVモードを示すキーワードはないので、「ファイルタイプ別の設定」を確認する。

getconfig関数を使い、「タブの文字数」の設定が 通常モード TSV/CSVモード 自由配置モード か判定する。

##### その1

各モードと、CSV/TSVを別々に判定。

#TabMode = getconfig("TabMode") //#TabMode と 0x000f で ANDした値がモードになる。 //0x0000　通常モード //0x0001　TSV/CSVモード（TSVかCSVかは0x0100で判断） //0x0002　自由配置モード

#Mode = #TabMode & 0x000f; #CsvTsv = #TabMode & 0x0f00;

if(#Mode == 0x000){ //通常モード else if(#Mode == 0x001){ //TSV/CSVモード if(#CsvTsv == 0x0100){ //CSVモード }ekse{ //TSVモード } else if(#Mode == 0x002){ //自由配置モード }

##### その2

各モードと、CSV/TSVを一度に判定。

#TabMode = getconfig("TabMode") //#TabMode と 0x000f で ANDした値がモードになる。 //0x0000　通常モード //0x0001　TSV/CSVモード（TSVかCSVかは0x0100で判断） //0x0002　自由配置モード //0x0f00　TSV/CSV判別（&した値） //0x0100　TSV/CSV判別はCSVモード（0x0001もあるとき） #MODE_CSV = 0x0101; #MODE_TSV = 0x0001; #Mode = #TabMode & 0x0f0f;

if(#Mode == #MODE_CSV){ //CSVモード else if(#Mode == #MODE_TSV){ //TSVモード else{ //CSV/TSV以外 }

#### CSV/TSVモードにする

config文で、設定する

    #TabMode = getconfig("TabMode");
    if((0x0f0f & #TabMode) != 0x0101){
      //CSVモードではないので、CSVモードに設定する。
      config("xTabMode:0x0101");
    }

### 補足

#### 名前が同じで、共有フラグが異なる場合

名前が同じでも共有フラグが異なる場合は、別の「静的な変数」と認識されます。

    setstaticvariable "check", "hidemaru editor", 0;
    setstaticvariable "check", "秀丸エディタ", 1;

    //名前は大文字小文字は区別されない
    $n1 = getstaticvariable("CHECK", 0);
    $n2 = getstaticvariable("CHECK", 1);

    message $n1 + "\n" + $n2;

    //後始末
    setstaticvariable "check", "", 0;
    setstaticvariable "check", "", 1;
    endmacro;

#### 共有フラグの「-1」について

「静的な変数」は外部DLLから取得・設定が可能です。共有フラグ「-1」だと、通常の文字変数と同じなので、外部DLLとのやり取りで使用するには都合がいいです。

ページトップ 目次に戻る