• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:読み込んだテキストファイルの数字を使って計算するにはどうしたらいいので)

テキストファイルの数字を使って計算する方法

このQ&Aのポイント
  • テキストファイルの数字を使って計算するには、JavaScriptのXMLHttpRequestを使ってテキストファイルを読み込み、配列に格納する必要があります。
  • 読み込んだテキストファイルのデータは改行区切りであり、タブで要素を分割して配列に格納されます。
  • 配列に格納されたデータを使ってさまざまな計算が行えます。

質問者が選んだベストアンサー

  • ベストアンサー
  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.1

全体の流れがわかりませんが… >「格納データの表示」ではこの作成した配列要素が表示できません ajaxでテキストを取得してから、表示させてますか? 非同期通信になっているようなので、showDataを値の取得前に実行すれば表示されないはず。 配列定義でlines.length-1にしているのは、データの最後に必ず改行が入っていることになっているから? いらぬお世話ですが、var TABを定義しているけれど使っていない? テキストを数字にするには+、-の符号をつけても良いけれど、 数値の判断  http://www.ajaxtower.jp/js/global_function/index3.html 数値化  http://www.sasaraan.net/program/js/jsnumber.html とかでしょうか…

taquito2007
質問者

お礼

ありがとうございます。 >ajaxでテキストを取得してから、表示させてますか? >非同期通信になっているようなので、showDataを値の取得前に実行すれば表示されないはず。 つまり再度 createXMLHttpRequest を使用してデータを取得するということでしょうか? それともevalやexecScriptを使用するということでしょうか? 初心者の質問で恐縮です。 >配列定義でlines.length-1にしているのは、データの最後に必ず改行が入っていることになっているから? あいにくそうなんです。 >いらぬお世話ですが、var TABを定義しているけれど使っていない? すいません。"\t"から変更すべきでした。

その他の回答 (2)

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.3

No1です。 ajaxで通信する場合、通信に多少なりとも時間がかかります。 それなのですぐに表示しようとしても、まだテキストを受け取っていないということがあり得ます。 例えば、  ・ ・ ・  loadDataFile();  showData();  ・ ・ ・ みたいなコードになっていると、値を配列に格納する前に表示処理を行うことになってしまいます。 どういう手順で(タイミングで)showData()を実行するおつもりなのかわかりませんが、とりあえず「取得できたら表示」でよいのであれば、No2様がおっしゃているようにcallback関数内(=storeData()内)で配列に格納後に実行する(=function callする)ようにすればよろしいかと思います。 実際に、どのようなタイミングにしたいのかがわかりませんが、取得前か後かを判別できるようにしておいたほうが宜しいかも。 例えば、ajax処理を1回しか行わないことがわかっているのならば、変数oArrayが定義されていれば取得済と判別できますし、何度も行う場合は処理のフラグでも設けておいてそれで判定するとかの方法もあるかも。

taquito2007
質問者

お礼

ありがとうございます。 一度作成したarrayは通常の変数のようにすぐアクセスできるものだと思ってました。 非同期処理をもっと勉強しなくてはとつくづく感じました。 ということは、計算もCallback関数内で行う必要があるということですね。 oArrayやdArrayが作成されるのは一回だけです。

  • think49
  • ベストアンサー率59% (285/482)
回答No.2

showData() を呼び出している部分はどこにあるのでしょうか? showData() は storeData() 内で呼び出す必要があります。 数値計算する場合は、データ型をNumber型に変換するのも忘れずに。 var number = '-10.5'; alert(typeof number); // string number = Number(number); alert(typeof number); // number