プロが教えるわが家の防犯対策術!

質問です。

現在テキストデータ(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がきちんと配列になっていないということでしょうか?

A 回答 (5件)

>どこが間違っているのでしょうか?



do {} while ループの中で、毎回 DATA = new Array(objTxt.Readline());
と「新規に」配列を作っているからです。
    • good
    • 0
この回答へのお礼

ありがとうございます。

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文では不可能なのでしょうか?

お礼日時:2007/12/17 23:12

配列にアクセスするには[]を使いましょう



配列の作成は
DATA = new Array();
でいいのですが
要素の代入が DATA = new Array( objTxt.ReadLine() ); では毎行ごとに新しい配列オブジェクトに置き換わってしまいます

DATA[DATA.length] = objTxt.ReadLine();
といった具合に配列オブジェクトの添え字をつけてアクセスしましょう

doループの終了条件は objTxt.AtEndStreamを使うともいますよ
    • good
    • 0

>に配列されているのですが、do文では不可能なのでしょうか?


自分で書いたコードをよく読むんだ。

do {
  DATA = new Array(objTxt.ReadLine());
} while (...);

と書いとるじゃろ。
これは loop のたびに「新しく Array オブジェクトを作成」して DATA 変数に代入しとるんじゃよ。
言い換えると、毎回 DATA オブジェクトは上書きされてしまっておるんじゃ。
    • good
    • 0
この回答へのお礼

ありがとうございます。
参考になります。

お礼日時:2007/12/18 00:22

どうせactiveXObjectなんてIE専用みたいなもんですから


VBScriptで書けばもっとわかりやすくなるんじゃないすか?
    • good
    • 0
この回答へのお礼

実は今、全くプログラムをさわったこと無い自分に
これまで先輩が作ったプログラムを修正せよ
という命令がありまして・・・・

それがJavaScriptでかかれてるため、致し方なく・・・

皆さん、本当に親切にありがとうございます。

お礼日時:2007/12/18 00:21

do{


  DATA[DATA.length] = objTxt.ReadLine();
} while(!objTxt.AtEndOfStream);
 
    • good
    • 0

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