電子書籍の厳選無料作品が豊富!

外部テキストファイルの読み込みを参考資料などを見ていると、下記のような形式で読み込みを行っているのですが。

a.txt
---------------------
任意の変数名1=値
任意の変数名2=値
任意の変数名3=値
---------------------

下記のようなテキストファイルを読み込むことは可能でしょうか?
a.txt
---------------------
2<>名前<>メールアドレス<>画像.jpg<>
1<>名前<>メールアドレス<>画像.jpg<>
---------------------
※最初の1文字目は連番の数字です

前文の方の読み込みは成功しておりますが、下の内容については、どうすればよいかわかりません・・・
読み込みができるのであれば、各行はsplitで配列に格納したいと思っています。

どうぞよろしくお願いいたします。

A 回答 (4件)

以下,#2 の方の補足的回答だと思っていただければよろしいかと思います。




> 各行はsplitで配列に格納したいと思っています。

ここが具体的でなくてよくわかりませんが,
「<>」 を区切り記号として,

 2, 名前, メールアドレス, 画像.jpg,
 1, 名前, メールアドレス, 画像.jpg,

というような2次元配列1つを作成するということとして回答します。


- - - - - - -

そして外部テキストですが,
回答するにはもう1つ問題点があります。
データを作成するソフトやOSやプログラムや設定によって改行コードは違います。

1つの例として,

 Windows の メモ帳 を用いて
 文字コードShift-JIS(ANSI)で普通に,

 2<>名前<>メールアドレス<>画像.jpg<>
 1<>名前<>メールアドレス<>画像.jpg<>

 というデータを記入して,
 「data.txt」 というファイル名で保存した場合

についてスクリプト例を回答します。


「data.txt」 と同じフォルダにSWFがある場合の,
フレームに書くスクリプト↓。

----------------------------------------
// テキストをShift-JIS として扱う
System.useCodepage = true;

// LoadVarsクラスのインスタンス myLV を作成
myLV = new LoadVars();

// データを格納する配列 dataArr を作成
dataArr = new Array();

// ロード完了時の動作定義(引数:ロードしたデータ)
myLV.onData = function(myData) {
// 改行コード区切りで preArr を作成
preArr = myData.split("\r\n");
// preArr の要素数未満でループ
for (i=0; i<preArr.length; i++) {
// preArr を <>区切りで dataArr のi番要素 に代入
dataArr[i] = preArr[i].split("<>");
}
// ---↓出力検証(本題と関係なし)↓---
for (i=0; i<preArr.length; i++) {
for (j=0; j<dataArr[0].length+1; j++) {
trace("dataArr["+i+"]["+j+"]="+dataArr[i][j]);
}
trace("------------");
}
// ---↑出力検証(本題と関係なし)↑---
};

// 外部テキストのロード
myLV.load("data.txt");
----------------------------------------



通常,
LoadVars.onLoad でロード完了のタイミングを取得すると思いますが,
上の例では LoadVars.onData で取得しています。

 LoadVars.onData = function(変数名){ }

という形で定義するとその 変数 の値としてロードしたデータ自体が代入されます。
このような方法を使うと,
 変数名=値&変数名=値&変数名=値&…
というデータ形式でなくてもロードしたデータを取ってくることが可能になります。
ご質問では,

> 外部テキストファイルの読み込みを参考資料などを見ていると、
> 下記のような形式で読み込みを行っているのですが。

と書かれていらっしゃいますが,
読み込み まででしたらどんな形のテキストファイルでも可能です。
たとえば XML でも HTML でも CSV でも SVG でも何でもです。

テキストのロードは何でも可能なのですが,
ただ,
XML を除くテキストの場合,
 変数名=値&変数名=値&変数名=値&…
のような形にしておかなければ,
データの値が利用できない (名指しで呼べない) から,
そういう形式のデータにしてあるだけです。

上のように LoadVars.onData を使うと,
データ全体は名指しで呼べるようになるので,
変な形のデータでも工夫次第でその後の利用が可能になります。


- - - - - - -

Windows メモ帳 の改行コードは \r\n(CR+LF) です。
また,文字コードは変えられますがデフォルトでは Shift-JIS です。
Excel で CSV を保存した場合も \r\n( CR+LF) です。
その他はソフトやそのソフトの設定によって変わります。

Mac の場合はソフトの設定によっては変えられると思いますが,
デフォルトでは Shift-JIS で,
基本的に改行コードは \n(LF) だと思います。

その他も場合によって変わります。


- - - - - - -

上のコードを書いて 「制御」→「ムービープレビュー」 してみると,
「出力検証(本題と関係なし)」 によって次のようなものが出力表示されます。

 dataArr[0][0]=2
 dataArr[0][1]=名前
 dataArr[0][2]=メールアドレス
 dataArr[0][3]=画像.jpg
 dataArr[0][4]=
 dataArr[0][5]=undefined
 ------------
 dataArr[1][0]=1
 dataArr[1][1]=名前
 dataArr[1][2]=メールアドレス
 dataArr[1][3]=画像.jpg
 dataArr[1][4]=
 dataArr[1][5]=undefined
 ------------

「<>」 を区切り記号としていますから,
画像.jpgの後にも <> があるため 画像.jpg の後にも "" という要素は存在します。
この点に少し注意してください。
 
    • good
    • 0
この回答へのお礼

お返事ありがとうございます!
ま、まさに知りたいことが全て解決しました!!

スクリプトまでご提示いただき、とても感謝しております。
ご指摘のとおり、テキストファイルの内容は操作上、自由に書きかえれるものではなく、FLASHに読み込みだけとなるため、「<>」の区切り線の最後についても注意いたします!

テキストファイルの文字コードは「Shift-JIS」です。質問内容に不備があったかと思いますが、ここまでご理解いただき幸いです!

本当にありがとうございました!!

お礼日時:2008/04/15 16:30

データ形式が固定されてるのであれば



myIndex_1=2<>名前<>メールアドレス<>画像.jpg<>
myIndex_2=1<>名前<>メールアドレス<>画像.jpg<>

としたらどうでしょうか

myIndex_n の部分は好きなように変えていただけますし

あるいはテキストファイルの先頭に単純に
myDat=を付加して

myDat=2<>名前<>メールアドレス<>画像.jpg<>1<>名前<>メールアドレス<>画像.jpg<>

とか

この回答への補足

アドバイスありがとうございます。

データ形式というよりテキストファイル自体を操作することが
できないという前提です。
なので、「myDat=」という文字列を追加することはできません。

あくまでも、テキストファイルを開いたら下記のようにデータが
格納されているのを前提にFlash側で読み込み各値を操作したいのです。
---------------------
2<>名前<>メールアドレス<>画像.jpg<>
1<>名前<>メールアドレス<>画像.jpg<>
---------------------

よろしくお願いいたします。

補足日時:2008/04/15 16:03
    • good
    • 0

私は外部ファイル読み込みにLoadVarsを使っており、以下はその場合の話となります。



LoadVarsでは、
1.ファイルを読み込み終わったとき
2.1のあとファイルをを解析し、自動で変数に格納し終わったとき
の処理を指定することができます。

2を使う場合にはa.txtのような形式にする必要がありますが、
1を使うなら好きな形式にし、読み込んだ内容を受け取って自分で加工することができます。



参考URL内の(3)を応用(区切り文字を「=」から[<>]に変更)して頑張ってみてください

参考URL:http://hima.chu.jp/flash/tips/loadvars.htm
    • good
    • 0
この回答へのお礼

アドバイスありがとうございます。

参考URLで少し道が開けた感じがいたします!!
通常のテキストファイルも(2)で読み込めると書いてますし、
(3)では改行コードで分けられることもありますね!!

参考に頑張ってみます!ありがとうございました。

お礼日時:2008/04/15 16:02

質問ですが、単純に


SAMPLE2=2,名前,メールアドレス,画像.jpg
SAMPLE1=1,名前,メールアドレス,画像.jpg
とテキストファイルに書いて、Flashに読み込み、
読み込んだ変数「SAMPLE1」、「SAMPLE2」をsplitで区切っても
出来なかったのでしょうか?

この回答への補足

ご意見ありがとうございます。

ご質問にある以下の形式のファイルであれば、読み込みは成功しております。
-----------
SAMPLE2=2,名前,メールアドレス,画像.jpg
SAMPLE1=1,名前,メールアドレス,画像.jpg
-----------
上記は「変数名=値」の形式ですから、理解できるんですが、

下記テキストには「=」もないしflashからみれば、ただの
文字列にしかならないのではないかと考え、そうなれば
どうやって読み込むのか?となりました。
-----------
2<>名前<>メールアドレス<>画像.jpg<>
1<>名前<>メールアドレス<>画像.jpg<>
-----------
これを1行がひとかたまりとして認識させ、値を読み込む
のかが知りたく、投稿させていただいたしだいです。

よろしくお願いいたします。

補足日時:2008/04/15 15:46
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!