関数集

Last-modified: 2016-02-23 (火) 13:22:38

Inside KAG3/小技なども参照のこと。

CSV出力関係

convertCSVCell(text)

説明

機能
文字列をCSVファイルのセル(保存時のイメージ)に変換する
引数
text…変換対象の文字列
戻り値
セル文字列(保存時のイメージ)
備考
‐半角カンマが含まれている場合、ダブルクォーテーションで囲む
‐半角ダブルクォーテーションが含まれている場合、エスケープした上でダブルクォーテーションで囲む

ソースコード

function convertCSVCell(text)
{
  var is_escape = false;
  if (text.indexOf('"') >= 0) {
    text = text.replace(/"/g, '""');
    is_escape = true;
  }
  if (is_escape || text.indexOf(',')>=0)
    text = '"' + text + '"';
  return text;
}

convertCSVLine(arr)

説明

機能
配列の要素をCSVファイルの一行(保存時のイメージ)に変換する
引数
arr…変換対象の配列
戻り値
CSVファイルの一行(保存時のイメージ)ぶんの文字列
備考
内部でconvertCSVCell()を利用している

ソースコード

function convertCSVLine(arr)
{
  var result = "";
  if (arr.count > 0) {
    result += convertCSVCell(string arr[0]);
    for (var i = 1; i < arr.count; i++)
      result += "," + convertCSVCell(string arr[i]);
  }
  return result;
}

convertCSVLine2(args*)

説明

機能
convertCSVLine()のバリエーション。複数の引数をCSVファイルの一行(保存時のイメージ)に変換する
引数
args*…変換対象の引数(任意の個数)
戻り値
CSVファイルの一行(保存時のイメージ)ぶんの文字列
備考
内部でconvertCSVLine()を利用している

ソースコード

function convertCSVLine2(args*)
{
  return convertCSVLine(args);
}

サンプル

Debug.console.visible = Debug.controller.visible = true;
var arr = [30, 'A"B', "c,d", 5.1, true];
Debug.message( convertCSVLine(arr) );
Debug.message( convertCSVLine2(30, 'A"B', "c,d", 5.1, true) );
// どちらも 30,"A""B","c,d",5.1,1 という結果になる

getFName(path)

説明

機能
ローカルファイル名からファイル名(拡張子なし)を抜き出す。splitLocalPath()の簡易版
引数
path…ローカルファイル名(Storages.getLocalName()の戻り値など)
戻り値
ファイル名(拡張子なし)
備考
エラーチェックはしていないので注意

ソースコード

function getFName(path)
{
  return /^(.*\\)?([[^\\\/:\?"<>\>]+)\..+$/.replace(path, function(arr){return arr[2]];});
}

サンプル

var path = "c:\\kirikiri_kag\\kag3\\MyProject\\bgimage\\教会.tlg";
var fname = getFName(path);  // "教会"が返る

referBookMark(num)

説明

機能
指定した栞のゲーム変数を参照する
引数
num…栞の番号
戻り値
正常終了…辞書配列オブジェクト
エラー終了…void
備考
‐戻り値が不要になったら無効化することが望ましい
‐エラーチェックはしていないので注意

ソースコード

function referBookMark(num)
{
  // 栞の番号numからファイル名を獲得
  var fn = kag.getBookMarkFileNameAtNum(num);
  // ファイルfnから栞を読み込む
  try {
    if (!Storages.isExistentStorage(fn))    // ファイルがない
      return void;
    var modestr;
    if (kag.saveThumbnail)
      modestr += "o" + kag.calcThumbnailSize().size;  // 指定オフセットからデータを読み込む
    var data = Scripts.evalStorage(fn, modestr);
    if(data.id != kag.saveDataID)
      return void;
    var result = data.user;
    result = %[] if result === void;
    return result;
  }
  catch(e) {
    return void;
  }
}

サンプル

例えば、栞0のゲーム変数f.money、f.levelを参照するには、以下のように記述する。

; 栞0の全ゲーム変数を参照し、辞書配列に読み込む
[eval exp="tf.dic = referBookMark(0)"]
[if exp="tf.dic != void"]
  ; 栞0のゲーム変数f.moneyの値を一時変数tf.moneyに代入
  [eval exp="tf.money = tf.dic.money"]
  ; 栞0のゲーム変数f.levelの値を一時変数tf.levelに代入
  [eval exp="tf.level= tf.dic.level"]
  ; 辞書配列を無効化
  [eval exp="invalidate tf.dic"]
[endif]

splitLocalPath(path)

説明

機能
ローカルファイル名からフォルダ、ファイル、拡張子を抜き出す
引数
path…ローカルファイル名(Storages.getLocalName()の戻り値など)
戻り値
キーdir、fname、extを有する辞書配列。それぞれの値にフォルダ、ファイル、拡張子が代入される
備考
‐戻り値が不要になったら無効化することが望ましい
‐エラーチェックはしていないので注意

ソースコード

function splitLocalPath(path)
{
  var arr = /^(.*\\)?([^\\\/:\?"<>\|]+)(\..+)$/.match(path);
  var result = new Dictionary();
  result.dir   = arr[1];
  result.fname = arr[2];
  result.ext   = arr[3];
  invalidate arr;
  return result;
}

サンプル

var path = "c:\\kirikiri_kag\\kag3\\MyProject\\bgimage\\教会.tlg";
var dic = splitLocalPath(path);
// 以下の辞書配列が返る:
//   dic.dir   = "c:\\kirikiri_kag\\kag3\\MyProject\\bgimage\\"
//   dic.fname = "教会"
//   dic.ext   = ".tlg"
invalidate dic;