• 締切済み

どうすればresponseText結果を配列に格納できますか?

どうすればresponseText結果を配列に格納できますか? javascript初心者同然のものです。 今サーバー上にあるテキストファイル(10列*4行)をjavascriptで読み込み、各行を異なる一次配列に格納したいと思ってますが、。 例えば以下のように構成できればと思います。 function loadTextFile() { httpObj = createXMLHttpRequest(storeData); if (httpObj) { httpObj.open("GET", path, true); httpObj.send(null); } } // 読み込んだファイルを格納 function storeData() { if ((httpObj.readyState == 4) && (httpObj.status == 200)) { var result = httpObj.responsetext.split("\t"); ---> ここにループで配列に格納したい } }

みんなの回答

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.1

テキストファイル(10列*4行)を、各行を異なる一次配列に格納したい =>行が改行文字 \n 、列がタブ文字 \t で区切られていて、 行数、列数が固定ならば、別にループにしなくても  var data1,data2,data3,data4;  var result = httpObj.responsetext.split("\n");  data1 = result[0].split("\t");  data2 = result[1].split("\t");  data3 = result[2].split("\t");  data4 = result[3].split("\t"); でいいでしょう。 それとも、行数、列数不明で、2次元配列にしたいって意味ですか?

taquito2007
質問者

お礼

ありがとうございます。非常に役に立ちました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 読み込んだテキストファイルの数字を使って計算するにはどうしたらいいので

    読み込んだテキストファイルの数字を使って計算するにはどうしたらいいのでしょうか? 以下のコードを使って、サーバーにあるテキストファイルを読み込み、新しく作成した2つの配列に格納しました。ただ最後の「格納データの表示」ではこの作成した配列要素が表示できません。「データを配列に格納」のファンクション内では、配列作成時にvarを使わずスコープをglobalにしたつもりです。 目的としては、このテキストファイルにある数字を使っていろいろと計算できればと考えてます。 助言などよろしくお願い致します。      // データのロード     function loadDataFile() { httpObj = createXMLHttpRequest(storeData); if (httpObj) { var fname = "upload/cluster.txt"; httpObj.open("GET", fname, true); httpObj.send(null); } }          // データを配列に格納 function storeData() { if ((httpObj.readyState == 4) && (httpObj.status == 200)) { document.getElementById("resultData").innerText = httpObj.responseText; // 改行 var LF = String.fromCharCode(10); // タブ区切り var TAB = String.fromCharCode(9); // テキストを改行区分 var lines = httpObj.responseText.split(LF); // データ格納配列を準備(global scope) oArray = new Array(lines.length-1); // Origin dArray = new Array(lines.length-1); // Destination for (var iCnt = 0; iCnt < lines.length-1; iCnt++) { oArray[iCnt] = lines[iCnt].split("\t")[0]; dArray[iCnt] = lines[iCnt].split("\t")[1]; } }else{ document.getElementById("resultData").innerText = "Loading..."; } }     // 格納データを表示 function showData() { for(var j = 0; j < oArray.length; j++) { alert(oArray[j]); } }

  • javaScript Nullまたはオブジェクトではありません エラー

    javaScriptは詳しくなく、サンプルプログラムを 参考にさせていただきながらテストをしています。 現在javaScriptで、タブ切り替えで表示内容を変更し、 表示されたフォームに、data.textの内容を表示するという テストをしています。 [コード] <html> <head> <meta http-equiv="content-type" content="text/html;charset=shift_jis"> <title></title> <script type="text/javascript"><!-- function loadTextFile() { httpObj = new ActiveXObject("Microsoft.XMLHTTP"); httpObj.onreadystatechange = statusCheck; httpObj.open("GET","data.txt",true); httpObj.send(null); } function statusCheck() { if ((httpObj.readyState == 4) && (httpObj.status == 200)) { displayData(); } } function displayData() { document.ajaxForm.result.value = httpObj.responseText; } // --></script> </head> <body> 省略(タブの切り替え設定) <div style="display:none" id="NAME11"> test1 </div> <div style="display:none" id="NAME22"> <form name="ajaxForm"> <input name="button" type="button" onClick="loadTextFile()" value="読み込み"> <textarea name="result" cols="40" rows="5"></textarea> </form> </div> <div style="display:none" id="NAME33"> test3 </div> </body> </html> ------------------------ 上記を実行すると "document.ajaxForm.resultは Nullまたはオブジェクトではありません" というエラーになってしまいます。 よろしくお願いします。

  • 無名関数内の変数のreturn

    httpObj.onreadystatechange = function() { if ((httpObj.readyState == 4) && (httpObj.status == 200)) { var data = httpObj.responseText.split(","); Ajaxで非同期通信をしています。 ステータスチェックをして、respinseTextを受け取るのですが、この変数dataをどうしてもreturnしたいのです。 このままだと、当然ローカル変数なのでreturnできません。 前に同じ質問をして、同期通信にすればよいのでは?とアドバイスをいただいたのですが、今回はどうしても非同期通信を行いたいのです。 変数varをそのまま別の関数の引数にする、という方法では解決できずに困っております。 何かよい方法があれば、アドバイスをお願いします。

  • Ajaxが動きません~『status=0』?

    Ajaxを使うため、 web上のサンプルをとってきて実行してみたところ、動きません。 いろいろ調べてみたところ、 通常  if(httpObj.status == 200) などで使われるstatusが0になっていることが分かりました。 どこかで  『ローカル上ではstatusは0になる』 という記述を見たのですが、Apache2.0.59が入っています。 Apacheが入っていてもstatusは0になるのでしょうか? 今回使用したサンプルは以下のサイトをのモノを貼り付けました。 http://www.openspc2.org/JavaScript/Ajax/Ajax_study/chapter02/004/index.html その上で、   if ((httpObj.readyState == 4) && (httpObj.status == 200))   {     displayData();   } else {     document.ajaxForm.result.value = httpObj.status;   } としました。 これで2日悩んでいるので、解決したいのです。 よろしくお願いいたします。

  • Ajaxが機能しない

    IE6.02を使っています。 次のようにAjaxのテストをしようとしたのですが、 「data.txt」に入っている文字(aaa)が表示されませんでした。 スクリプトのエラーも出てないようなのですが、なにが原因なのでしょうか? <html> <head> <meta http-equiv="content-type" content="text/html;charset=shift_jis"> <title>XMLHttpRequest()の基本(Win IEの場合)</title> <script type="text/javascript"><!-- function loadTextFile() { httpObj = new ActiveXObject("Microsoft.XMLHTTP"); httpObj.onreadystatechange = statusCheck; httpObj.open("GET","data.txt",true); httpObj.send(null); } function statusCheck() { if ((httpObj.readyState == 4) && (httpObj.status == 200)) { displayData(); } } function displayData() { document.ajaxForm.result.value = httpObj.responseText; } // --></script> </head> <body> <h1>XMLHttpRequest()の基本 (Win IEの場合)</h1> <form name="ajaxForm"> <input type="button" value="読み込み" onClick="loadTextFile()"><br> <textarea name="result" cols="40" rows="5"></textarea> </form> </body> </html>

  • Ajaxで変数が受け取れない

    function chk() { var up_file = false; httpObj = createXMLHttpRequest(displayData); if (httpObj) { httpObj.open("POST","file_chk.php",true); httpObj.setRequestHeader("content-type", "application/x-www-form-urlencoded;charset=UTF-8"); httpObj.send("chk=(ファイル名)"); } function displayData() { if ((httpObj.readyState == 4) && (httpObj.status == 200)) { if (httpObj.responseText == "true") { up_file = true; } } } alert(up_file); } } 以上のようなソースのJavaScriptプログラムがあります。Ajaxを使ったもので、phpのプログラムでファイルの有無を調べるというものです。 まず最初に有無の確認用の変数up_fileを設定し、phpを使ったAjaxで検査、Ajaxが作動すると関数displayData()が実行され、ファイルがあればup_fileの値を初期値falseからtrueへ上書きするというものです。 ところがファイルがちゃんとあるのにup_fileの中身はflaseのままなのです。ソースにalertを書いた場所でfalseが返ってきます。その前のスコープ内に入れると、Ajaxで問い合わせるので数回falseが出た後最終的にtrueになります。なのにその1つ後のスコープ内、つまり関数displayData()を抜けた大元の関数chk()内に置くとfalseになってしまうのです。trueにする時varを使ってないのでグローバル変数の書き換えすら可能なはずなのですが・・・。 なぜ変数up_fileの上書きが出来ないのでしょうか?

  • POSTだとAjaxをループできない

    <html> <head> <meta http-equiv="content-type" content="text/html;charset=shift_jis"> <title>Ajax</title> <script type="text/javascript"> <!-- function createXMLHttpRequest(cbFunc) { XMLhttpObject = new XMLHttpRequest(); if (XMLhttpObject) XMLhttpObject.onreadystatechange = cbFunc; return XMLhttpObject; } function func() { for (i=0; i<5; i++) { httpObj = createXMLHttpRequest(displayData); if (httpObj) { httpObj.open("GET","file_chk.php?chk=(ファイル名)",true); httpObj.send(null); //httpObj.open("POST","file_chk.php",true); //httpObj.send("chk=(ファイル名)"); } } } function displayData() { if ((httpObj.readyState == 4) && (httpObj.status == 200)) { alert(httpObj.responseText); } } // --> </script> </head> <body> <input type="button" value="Ajax" onclick="func();" /> </body> </html> 先の投稿と似たものになってしまいますが、以上のようなソースのプログラムを組みました。ボタンを押すとAjaxが作動してphpプログラムを呼び出し、その結果を返すというものです。phpプログラムは任意のファイル名を変数として受け取り、その存在の有無によって返事を返すというものです。ソースは以下の通りです。 <? $file = $_GET['chk']; //$file = $_POST['chk']; if (file_exists($file)) { print "true"; } else { print "false"; } ?> このAjaxで問い合わせるという処理全体をループさせたいのですが、コメントアウトしているPOSTで実行するとうまくいきません。1回しかアラートが出なかったり、5回と設定してるのにそれ以上出たり。当初これに悩まされてましたが、GETで試すとうまくいきました。なぜPOSTだとうまくいかなかったのでしょうか?自分なりに考えてみたのですが全く分かりません。ソースのもので試すときは一方のコメントアウトを外し、他方をコメントアウトさせていました。もちろんphpの方も同様です。 GETとPOSTで書いたソースは間違ってませんよね?同じ意味になってますよね?どちらの方法でもいいことはいいんですが、GETだと与えるクエリによっては行が横に長くなってしまいますし、sendがあるのならそこに変数を書いたほうが見やすいのではないかと思ってPOSTを使ってました。

  • ホームページのサンプルソースを実行するとオブジェクトを指定してくださいとエラーが出ます

    下記URLのサンプルソースを実行するとオブジェクトを指定してくださいとエラーになります。実行された方、お解かりになられます方、 どこか変更しなければなりませんか? 宜しくお願いします。 URL:http://www.openspc2.org/JavaScript/Ajax/Ajax_study/chapter03/002/index.html 私が実行しました上記のソース(jsファイルはソースに展開しています)CSVデータも作成しています。 <html> <head> <meta http-equiv="content-type" content="text/html;charset=shift_jis"> <title>CSVファイルを表示する</title> <script type="text/javascript"><!-- function loadDataFile(fName) { httpObj = createXMLHttpRequest(displayData); if (httpObj) { httpObj.open("GET",fName,true); httpObj.send(null); } } function displayData() { if (httpObj.readyState == 4) { $("result").innerHTML = parseTabText(httpObj.responseText); }else{ $("result").innerHTML = "<b>Loading...</b>"; } } // CSVファイルを解析して表示 function parseTabText(tabText) { var resultText = "<table border='1' cellspacing='0'>"; var CR = String.fromCharCode(13); // 改行コード (CR) lineData = tabText.split(CR); for (var i=0; i<lineData.length; i++) { wCount = lineData[i].split(","); resultText += "<tr>"; for (j=0; j<wCount.length; j++) { tData = wCount[j]; // データ resultText += "<td>"+tData + "</td>"; } resultText += "</tr>"; } resultText += "</table>"; return resultText; } // HTTP通信用、共通関数 function createXMLHttpRequest(cbFunc) { var XMLhttpObject = null; try{ XMLhttpObject = new XMLHttpRequest(); }catch(e){ try{ XMLhttpObject = new ActiveXObject("Msxml2.XMLHTTP"); }catch(e){ try{ XMLhttpObject = new ActiveXObject("Microsoft.XMLHTTP"); }catch(e){ return null; } } } if (XMLhttpObject) XMLhttpObject.onreadystatechange = cbFunc; return XMLhttpObject; } // --></script> </head> <body> <h1>CSVファイルを表示する</h1> <p>CSVファイルを読み込み表示します</p> <form name="ajaxForm"> <input type="button" value="sample.csvファイルを読み込み" onClick="loadDataFile('sample.csv')"><br> </form> <div id="result"></div> </body> </html>

  • 無名関数内の変数のreturn

    function get_record(id,step,exefunc) { httpObj = new XMLHttpRequest(); ...XMLHttpRequest非同期通信  httpObj.onreadystatechange = function() { if(httpObj.readyState == 4) && (httpObj,status == 200) { data = httpObj.responseText; exefunc(data); }}} 上記関数でデータを1件取得します。 質問は2つあって、今はhttpObj.responseTextをexefunc関数の引数として渡して、responseTextを処理しています。 httpObj.responseTextをexefunc関数で処理するのではなくて、returnしたいのですが、どうすればよいかわかりません。無名関数の中にあるので、dataをreturnしても、外からは参照できないのです。 もう一つの問題は、get_record関数を呼び出す関数は2つあって、その2つを同時にwindow.onloadで実行したいのです。 get_recordでデータを取得、そのデータを表示するための関数disp1,disp2(表示場所が違うため2つにわけています)をwindow.loadで実行したいのですが、後に記述されたほうしか実行されません。 どうすれば2つがwindow.onloadで実行できるでしょうか。 足りない情報等あれば教えてください。 よろしくお願いします。

  • パソコンによってアクセスが拒否されましたと出ます。

    ローカルで下記ソースを実行しています。 実行するパソコンによって「アクセスが拒否されました」 と出たり出なかったりします。 上記エラーの質問検索し見たりしているのですが、まだまだ初心者なので・・・?状態です。 よろしくお願いします。 (ソース内容)sample.csvを読み込んでいます。 <html> <head> <meta http-equiv="content-type" content="text/html;charset=shift_jis"> <title>CSVファイルを表示する</title> <script type="text/javascript"><!-- function loadDataFile(fName) { httpObj = createXMLHttpRequest(displayData); if (httpObj) { httpObj.open("GET",fName,true); httpObj.send(null); } } function displayData() { if (httpObj.readyState == 4) { $("result").innerHTML = parseTabText(httpObj.responseText); }else{ $("result").innerHTML = "<b>Loading...</b>"; } } // CSVファイルを解析して表示 function parseTabText(tabText) { var resultText = "<table border='1' cellspacing='0'>"; var CR = String.fromCharCode(13); // 改行コード (CR) lineData = tabText.split(CR); for (var i=0; i<lineData.length; i++) { wCount = lineData[i].split(","); resultText += "<tr>"; for (j=0; j<wCount.length; j++) { tData = wCount[j]; // データ resultText += "<td>"+tData + "</td>"; } resultText += "</tr>"; } resultText += "</table>"; return resultText; } // HTTP通信用、共通関数 function createXMLHttpRequest(cbFunc) { var XMLhttpObject = null; try{ XMLhttpObject = new XMLHttpRequest(); }catch(e){ try{ XMLhttpObject = new ActiveXObject("Msxml2.XMLHTTP"); }catch(e){ try{ XMLhttpObject = new ActiveXObject("Microsoft.XMLHTTP"); }catch(e){ return null; } } } if (XMLhttpObject) XMLhttpObject.onreadystatechange = cbFunc; return XMLhttpObject; } function $(tagId) { return document.getElementById(tagId); } // --></script> </head> <body> <h1>CSVファイルを表示する</h1> <p>CSVファイルを読み込み表示します</p> <form name="ajaxForm"> <input type="button" value="sample.csvファイルを読み込み" onClick="loadDataFile('sample.csv')"><br> </form> <div id="result"></div> </body> </html>