- 締切済み
配列をテキストデータから読み込む方法
質問です。 現在テキストデータ(data.txt)に 100 95 80 90 10 といった形で保存しています。 以下のように設定すると objFso = new ActiveXObject("Scripting.FileSystemObject"); myFile = objFso.GetFile("c:\\data.txt"); objTxt = myFile.OpenAsTextStream(1); var DATA = new Array(); do{ DATA = new Array(objTxt.ReadLine()); }while(!objTxt.AtEndOfLine) とした場合、DATAには最後の値しか入っていないのですが どこが間違っているのでしょうか? これはDATAがきちんと配列になっていないということでしょうか?
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- redfox63
- ベストアンサー率71% (1325/1856)
do{ DATA[DATA.length] = objTxt.ReadLine(); } while(!objTxt.AtEndOfStream);
- yambejp
- ベストアンサー率51% (3827/7415)
どうせactiveXObjectなんてIE専用みたいなもんですから VBScriptで書けばもっとわかりやすくなるんじゃないすか?
- koko_u_
- ベストアンサー率18% (459/2509)
>に配列されているのですが、do文では不可能なのでしょうか? 自分で書いたコードをよく読むんだ。 do { DATA = new Array(objTxt.ReadLine()); } while (...); と書いとるじゃろ。 これは loop のたびに「新しく Array オブジェクトを作成」して DATA 変数に代入しとるんじゃよ。 言い換えると、毎回 DATA オブジェクトは上書きされてしまっておるんじゃ。
お礼
ありがとうございます。 参考になります。
- redfox63
- ベストアンサー率71% (1325/1856)
配列にアクセスするには[]を使いましょう 配列の作成は DATA = new Array(); でいいのですが 要素の代入が DATA = new Array( objTxt.ReadLine() ); では毎行ごとに新しい配列オブジェクトに置き換わってしまいます DATA[DATA.length] = objTxt.ReadLine(); といった具合に配列オブジェクトの添え字をつけてアクセスしましょう doループの終了条件は objTxt.AtEndStreamを使うともいますよ
- koko_u_
- ベストアンサー率18% (459/2509)
>どこが間違っているのでしょうか? do {} while ループの中で、毎回 DATA = new Array(objTxt.Readline()); と「新規に」配列を作っているからです。
お礼
ありがとうございます。 do{ BIRU_DATA = objTxt.ReadLine(); }while(!objTxt.AtEndOfLine) for ( var i = 0 ; i < 10 ; i++ ){ BIRU_DATA[i] = objTxt.ReadLine(); } とした場合、for文ではきちんと BIRU_DATA[0] BIRU_DATA[1] BIRU_DATA[2] に配列されているのですが、do文では不可能なのでしょうか?
お礼
実は今、全くプログラムをさわったこと無い自分に これまで先輩が作ったプログラムを修正せよ という命令がありまして・・・・ それがJavaScriptでかかれてるため、致し方なく・・・ 皆さん、本当に親切にありがとうございます。