TONY0922のブログ

学んだことを適当に記録していくブログです。主にRubyで仕事してます。最近はJavaScriptとObjectibe-C始めました。Titanium関連もちょいちょい触ってます。更新頻度はそんなに高くないので、ご了承下さい。

Titanium Mobileでtsvファイルから初期データを入れる。

Titanium SDK:3.2.0
Alloy:1.3.0

tsvファイルから初期データ読み取って、テーブルに入れる方法を考えた。

■ tsvファイル

1行目 column1 column2 column3
2行目 aaa AAA 111
3行目 bbb BBB 222
4行目 ccc CCC 333
5行目 ddd DDD 444

/**
 * tsvファイルからインスタンスを作成し、データ作成。
 * 1行目はテーブルのカラム名を記述。
 * 2行目以降は1行目の同列のカラムのデータを記述。
 * @param {Object} filePath tsvファイルまでのpath
 * @param {Object} modelName モデル名
 */
function insertInititalData(filePath, modelName) {
	var fileData = Ti.Filesystem.getFile(Ti.Filesystem.resourcesDirectory, filePath);
	var fileContents = fileData.read().toString();
	var fileLines = fileContents.split(/\r\n|\r|\n/);

	// カラムを取得
	var tableColumns = fileLines[0].split('\t');

	// 2行目以降のデータでインスタンス化
	for (var i = 1; i < fileLines.length; i++) {
		var modelLineWords = fileLines[i].split('\t');
		var params = _.object(tableColumns, modelLineWords);
		var model = Alloy.createModel(modelName, params);
		model.save();
	}
}

ファイルの末尾に空行が入ってるとうまく動かないと思うので、
そこだけ除去してください。

上記の方法の利点はカラムが増えても、改修不要な点。
JavaScriptもさることながら、Underscore.jsがかなり使える。
Ruby on Rails 使ってる人はすぐに慣れるはず。