• 締切済み

配列をテキストデータから読み込む方法

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

みんなの回答

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.5

do{   DATA[DATA.length] = objTxt.ReadLine(); } while(!objTxt.AtEndOfStream);  

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.4

どうせactiveXObjectなんてIE専用みたいなもんですから VBScriptで書けばもっとわかりやすくなるんじゃないすか?

tsunamikow
質問者

お礼

実は今、全くプログラムをさわったこと無い自分に これまで先輩が作ったプログラムを修正せよ という命令がありまして・・・・ それがJavaScriptでかかれてるため、致し方なく・・・ 皆さん、本当に親切にありがとうございます。

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.3

>に配列されているのですが、do文では不可能なのでしょうか? 自分で書いたコードをよく読むんだ。 do {   DATA = new Array(objTxt.ReadLine()); } while (...); と書いとるじゃろ。 これは loop のたびに「新しく Array オブジェクトを作成」して DATA 変数に代入しとるんじゃよ。 言い換えると、毎回 DATA オブジェクトは上書きされてしまっておるんじゃ。

tsunamikow
質問者

お礼

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

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

配列にアクセスするには[]を使いましょう 配列の作成は DATA = new Array(); でいいのですが 要素の代入が DATA = new Array( objTxt.ReadLine() ); では毎行ごとに新しい配列オブジェクトに置き換わってしまいます DATA[DATA.length] = objTxt.ReadLine(); といった具合に配列オブジェクトの添え字をつけてアクセスしましょう doループの終了条件は objTxt.AtEndStreamを使うともいますよ

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.1

>どこが間違っているのでしょうか? do {} while ループの中で、毎回 DATA = new Array(objTxt.Readline()); と「新規に」配列を作っているからです。

tsunamikow
質問者

お礼

ありがとうございます。 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文では不可能なのでしょうか?

関連するQ&A

  • データの読み込み方法について

    現在、独学でJavaScriptを勉強しています。 教えて頂きたいのですが、 objFso = new ActiveXObject("Scripting.FileSystemObject"); myFile = objFso.GetFile("***"); objTxt = myFile.OpenAsTextStream(1); とし、 読み込む元ファイルが A 123 B 456 C 789 このようなデータである場合に do{ var DATA = objTxtz.ReadLine(); }while(objTxtz.AtEndOfStream==false); では、うまくデータを読み込んでくれないのですが どこかおかしいでしょうか? 本当はAを選べば123、Bを選べば456といった形にしたいのですが まず最初の読み込みの段階でつまづいています。 お手数ですが、 どなたかお教え願えないでしょうか?

  • 【AS3.0】外部テキストから配列を読み込む

    fla→PHPに変数・配列のデータを送り、 下記のようなテキストデータを.txtファイルに出力するものを作りました。 var1=1&var2=0&array1=1,2,3&array2=1,2,3,4&array3=1,2,3,4,5 送られた変数・配列はすべて連なっており、&で区切られています。 変数を読み込むには下記で出来るようですが、 参考URL:http://ninotk.oops.jp/weblog/?p=30 private var filePath:String = "topics.txt"; private var tpcLoader:URLLoader; init(); function init(){ tpcLoader = new URLLoader(); tpcLoader.dataFormat = URLLoaderDataFormat.VARIABLES; tpcLoader.addEventListener(Event.COMPLETE,onComplete); tpcLoader.load(new URLRequest(filePath)); } private function onComplete(evt:Event):void{ var src:String = evt.target.data; var vars:URLVariables = new URLVariables(src); contents.topics._date.text = vars.date; contents.topics._txt.text = vars.news; } 配列を読み込む手順がどうしても分かりませんでした... さらに上記のような変数・配列混合での読み込みは可能でしょうか。 もし不可能のようでしたら、変数のみのtxtと配列のみのtxtとで分けての出力も可能です。 よろしくお願い致します。

    • ベストアンサー
    • Flash
  • VBAで2変数の差分を取る方法  その2

    前回はありがとうございました。 まだ最終までは行ってないのですが、Wendyさんfumufumuさんに教えていただいたマクロともうまく動きます。 fumufumuさんの変数bufなんですが、この中身をシートに一行ずつ入れるにはどうするのでしょう。 Msgboxでは行ごとに綺麗に表示されす。 OpenAsTextStreamで開きReadAllで読み込んだbufの中身は配列になっているのでしょうか。 Splitで色々やってみたんですが、旨くいかいなです。 ---------------------------------------------------- Set fso = CreateObject("Scripting.FileSystemObject") With fso.GetFile(TXT).OpenAsTextStream .Skip size buf = .ReadAll .Close End With Set fso = Nothing MsgBox buf ------------------------------------------------------ fumufumuさんのDim fso As New FileSystemObjectでは動かなかったので Set fsoにするなど一部変えてあります。

  • PHPのようにスマートに配列の配列など記述する方法が

    PHPの場合、データ構造ですが以下のようになっています。 $a = array( "test1" => array( array(1,1), array("x", 2) ), "test2" => array( array(3,2), array("y", 1) ), ); これをエクセルVBAの場合、Scripting.Dictionaryを使えば連想配列が 可能ですが、PHPのようにスマートに配列の配列など記述する方法が わかりません。 Dim dic As Scripting.Dictionary set dic = New Scripting.dictionary dic.Add "test1", ???????????????? dic.Add "test2", ???????????????? スマートにデータ構造を実現できる方法が知りたいです。

  • 不規則な配列を読む方法

    質問です。 以下のようなcsvファイルを読み込む際に a , b , c d , e , f , g h , i , j k , l , m , n , o <プログラム> var data1 = new Array(); var data2 = new Array(); var data3 = new Array(); var i = 0; do{ data1[i] = objTxt.ReadLine(); data2[i] = data1[i].split(","); data3[i] = Array(data2[i][0] ,data2[i][1] ,data2[i][2] ,data2[i][3] ,data2[i][4]); i = i + 1; }while(!objTxt.AtEndOfLine) といった具合に読んでしまうと、data2[0][4]など ないところのデータまで無理矢理よんでしまうことになります。 undefinedと表示され、使うぶんには困らないのですが、 うまく必要な場所までよむことって可能でしょうか? つまり上の例だとdata2[0][2]まで、次の行はdata2[1][3]まで といった具合です。 もし、方法がありましたら、どなたかお教え願います。

  • javascriptでファイルの操作

    下記のコードを書いたのですが、ActiveXObject is not definedというエラーが出ました。 var v = new ActiveXObject("Scripting.FileSystemObject"); どうすれば正常に動作しますか?

  • テキストファイルに一行文字を追加したい

    バッチ処理でテキストファイルの最後に文字列を追加する作業をやりたいのです。 普通の文字列ですと、1)のようにして上手くいきます。 ところが「"」の入った文字列を一行加えようと2)のようにすると、エラーになってしまいます。どうしたら前に進めるでしょうか? --------- 1)上手くいくケース ----------- Set fso = CreateObject("Scripting.FileSystemObject") Set tmpFile = fso.GetFile("C:\test\hoge.txt") Set f = tmpFile.OpenAsTextStream(8, -2) f.Write("一行追加しました") f.close Set f = Nothing Set tmpFile = Nothing Set fso = Nothing --------- 2)上手くいかないケース ----------- Set fso = CreateObject("Scripting.FileSystemObject") Set tmpFile = fso.GetFile("C:\test\hoge.txt") Set f = tmpFile.OpenAsTextStream(8, -2) f.Write("一行"追加"しました") f.close Set f = Nothing Set tmpFile = Nothing Set fso = Nothing

  • 読み込んだデータを配列へ代入する方法

    ---ここから--- 1,2 3,4 ---ここまで--- このようなファイルを読み込んでデータを配列へ格納するには, $pathname="D://data.txt"; open MYFILE, "$pathname"; @list=<MYFILE>; for($i=0;$i<2;$i++){ @dat=split(/,/,$list[$i]); print @dat; } close MYFILE; といったようなforあるいはwhileで1つの配列(上の場合だと@dat)に1行のデータを繰り返し入れていく方法しか思い浮かびません。できれば1行目のデータは@dat1という配列へ,2行目のデータは@dat2という配列へ,といったように行ごとに別々の配列へ代入させたいのですが良い方法はないでしょうか。 もしくは@dat=([1,2],[3,4])のような2次配列の形にでもできれば最高なのですが、、、

    • ベストアンサー
    • Perl
  • 2つの配列を比較し、3つ目の配列に入れた後にソートする方法

    javascriptでとある人口の表を作成しようとしています。 そこで、2つの配列を比較して、同じ県名であれば数値を加算して3つ目の配 列に格納し、同じ県名がなかった場合はそのまま3つ目の配列に格納した後、 人口の多い場所から順に並べていくという方法が思いつきません。 (sort関数をどのように使用すればよいのかもわかりません。) var list1[0] = new Array("熊本",100); var list1[1] = new Array("長崎",200); var list1[2] = new Array("佐賀",300); var list1[3] = new Array("宮崎",450); var list2[0] = new Array("熊本",100); var list2[1] = new Array("長崎",200); var list2[2] = new Array("佐賀",300); var list2[3] = new Array("鹿児島",500); という形の2つの配列があった場合 var list3[0] = ["佐賀",600]; var list3[1] = ["鹿児島",500]; var list3[2] = ["宮崎",450]; var list3[3] = ["長崎",400]; var list3[4] = ["熊本",200]; 最終的にはこのような形になるようにしたいです。 どうか教えていただけないでしょうか。 よろしくお願いします。

  • PHPの配列をjavascriptへ渡したい

    PHPの配列をjavascriptの配列に渡したいのですがやり方がわかりません。 変数の渡し方ならわかるのですが配列はどう渡せばいいのでしょうか? for文を使って渡せばいいと思うんですがどうやればいいか分かりません。 <?php $filedata=file("data.txt");//javascriptに渡したい配列 ?> <script language="javascript"> var a=new Array();//PHPの配列をこの配列に入れたい </script> 何方か教えてください。

    • ベストアンサー
    • PHP

専門家に質問してみよう