巨大なtxtファイルを使用してアプリを配布し、ユーザーのデバイスにインポートしないでください。これには時間がかかり、面倒です。
むしろ、事前に入力されたデータベースを使用してアプリを配布し、res
フォルダーからコピーします。android-sqlite-asset-helperを使用してこれを自動化できます。
また、はい。データベースは常に内部メモリに保存されており、ルート化されていないデバイスではアクセスできません(AVDを使用している場合を除く)。
txt-contentsをデータベースにインポートするには、コンテンツを解析して対応するSQLクエリを実行するスクリプトなどを作成します。繰り返しになりますが、アプリはrawファイルではなく、データベースに付属している必要があります。
私は少し退屈して、短いPythonスクリプトをハッキングして、txtファイルからすべてのエントリを読み取り、SQLiteデータベースに挿入しました。
import sqlite3
import re
counter = 0;
pattern = re.compile('^([^\^]+)\^([\w\s]+)\^(yes|no)\^\w+$');
conn = sqlite3.connect("imported.db");
cursor = conn.cursor();
# Create the Table:
conn.execute('''
CREATE TABLE Bands (
name TEXT,
genre TEXT,
popular INTEGER,
selected INTEGER
);''');
# Now, insert:
with open('bands.txt', 'r') as f:
for line in f:
match = pattern.search(line);
if match:
cursor.execute('''
INSERT INTO Bands (name, genre, popular, selected)
VALUES (?,?,?,0)''',
(
match.group(1), match.group(2),
(1 if match.group(3) == 'yes' else 0)
)
);
counter+=1;
conn.commit();
conn.close();
print "Imported ", counter, " bands!";
bands.txt
これは、txtファイルに名前が付けられ、各値がaで区切られ、/
各エントリが独自の行にあることを前提としています。結果のデータベースファイルはimported.db
です。
また、私INTEGER
はすべてのTrue|False
フィールド(人気のある、選択された)に使用します。これらは、0
falseの場合と1
trueの場合を保持します。
最後になりましたが、RegExでは-valueに「yes」と「no」のみが許可されますpopular
。