• ベストアンサー

データの読み込み方

visualBasic.NETを使用しているのですが、データの読み方がわかりません。 縦n個、横m個のdouble型数値のカンマ区切りのテキストファイルがあります。 配列a(n,m)にそれらの数値を入れるプログラムを教えてください。 仕事で必要なのですが、手持ちの参考書には書いてありません。 配列の数と数値の長さがわかっているときの方法はわかります。 今、問題になっているのは、配列の数も数値の長さも未知のときです。 大変申し訳ありませんが、よろしくお願いします。

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

ArrayListを使ったサンプルを作ってみました。 ArrayListから a(n,m)の配列にするには、 dim a(,) as double で宣言して redimしてからそれぞれの値をコピーすることになりますが、別段、そうした変換は必要ないと思います。 以下サンプル 'カンマ区切りのテキストファイルからdouble型数値を読み込む Imports System.Collections Imports System.IO Module Module1 Sub Main() Dim anArrayList As New ArrayList Dim i, j As Integer Dim oneLine As String Dim strArray() As String Dim doubleArray() As Double Dim sr As StreamReader sr = File.OpenText("data.txt") Do While sr.Peek() >= 0 oneLine = sr.ReadLine() strArray = oneLine.Split(",") doubleArray = Array.CreateInstance(GetType(Double), strArray.Length) For i = 0 To strArray.Length - 1 doubleArray(i) = Convert.ToDouble(strArray(i)) Next anArrayList.Add(doubleArray) Loop sr.Close() ' 表示 Console.WriteLine("anArrayList") Console.WriteLine("データ数:{0}", anArrayList.Count) For i = 0 To anArrayList.Count - 1 Console.WriteLine(ControlChars.CrLf & "データ[{0}]:", i) For j = 0 To anArrayList(i).Length - 1 Console.Write("[{0}]", anArrayList(i)(j)) Next Next End Sub End Module

roborobo
質問者

お礼

具体的に教えていただき、ありがとうございます。 早速、やってみたいと思います。

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

その他の回答 (1)

  • todo36
  • ベストアンサー率58% (728/1234)
回答No.1

2次元配列ではなく、DataTableを使えば簡単では? 縦横の個数を何時でも増やせるので

roborobo
質問者

お礼

ありがとうございます。 早速、やってみたいと思います。

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

関連するQ&A

  • データの数を数えるfortran プログラム

    横にm個、縦にn個の実数データが整然と並んでいます。ファイルを開いて読み込むのですが、縦横に何個のデータがあるかプログラムに感知させる方法があるでしょうか。 縦にn個のデータがあることは簡単でした。しかし横にm個あることを感知させるのが難しいです。今は、とにかく全データの個数を調べて、その個数をnで割って求めています。 全データを読む方はは、1個読んで巻き戻し、2個読んで巻き戻し、3個読んで巻き戻し、.... としてデータをこれ以上読めないというところまで読んでその個数が全データということになります。この部分がかなり時間を使います。データを開いてエディタで1行目のカラム数を数えればいいわけですが、プログラム的にはどうなるでしょうか。Cだったら、改行を感知させるという方法があるかもしれません。Fortranだったらどうなるでしょうか。 ※Fotranの専門の会議室がないのかなと思っていますが。

  • データの並べ替え?

    テキストデータに数値が入力されています。 数値,数値,・・・・,数値,[改行] 数値,数値,・・・・,数値,[改行]   ・   ・   ・ 数値,数値,・・・・,数値, こういう感じのデータです。 このデータの,(カンマ)の部分をタブ(orスペース)に置き換えて 数値 数値 ・・・・ 数値[改行]   ・   ・ 数値 数値 ・・・・ 数値[改行] こういうデータにしたいと思っています。 しかし、横一列のデータ数が512なので(縦は256)、 エクセルでは読み込めません。 フリーソフトでこういうデータ整理のできるソフトは ないでしょうか? よろしくお願いします。

  • 「"」(ダブルクォーテーション)で囲まれた「,」をキャンセルしてcsvの値を抽出するには

    111,"あいうえお",,"さしす,せそ" のテキストファイルを value[0] = 111 value[1] = あいうえお value[2] = value[3] = さしす,せそ いう形に配列に入れたいと思っています。見てもらえばわかると思いますが、数字には「"」(ダブルクォーテーション)が付かなくて、「"」の中に入っている「,」(カンマ)は区切り記号とはみなされず値として取り込んでいます。 splitの正規表現など使えないか苦悩しています。いまだ解決方法見つけられず。 テキストファイルの「"」(ダブルクォーテーション)有り/無しや順番などは都度変更されます。 カンマ区切りで、「"」(ダブルクォーテーション)で囲まれた部分は外して値を取り出すにはどうしたらいいのでしょう? ご存知の方、ご教授ください。

    • ベストアンサー
    • PHP
  • ArrayListの要素数の上限

    java で ArrayListの要素数の上限はいくつでしょうか? ネットで検索したところ C# の ArrayList は 2^32 - 1 のようですけど・・・。 たて、よこ 2^64 の巨大な実数値行列があって、これの固有値を求めるプログラムを作ることになっています。 最初は double の2次元配列で行列を作ろうと思ったのですが、double配列の要素数は 2^32-1 個が限界であきらめました。別の方法を探しているところなのです。 パソコンのメモリは24GBにしてOSも64bit Windowsにしたので java が対応できれば大丈夫かと思うのですが・・・ よろしくお願いします。

    • ベストアンサー
    • Java
  • 【C++】行列データの読み込み

    C++でテキストファイルに以下のようにカンマ区切り(例なのでスペース等でも構いません)で記述された行列を2次元配列に格納する方法が分かりません。 例 1,2,3 4,5,6 7,8,9 よい方法があればご教授願います。

  • 対角線が通過する正方形の数(中学入試問題)

    正方形を横にm個、縦にn個並べて、長方形を作ります。 そのできた長方形の対角線が通過する正方形の数を求める問題です。 mとnが互いに素の時、長方形の対角線は正方形の頂点を通過することがないみたいですが、 なぜだか説明できません。 どなたかこのことをうまく説明できる方がいましたら教えてください。 よろしくお願いします。

  • C言語で数値の受取

    C言語で横に並んだスペース区切りの数値を受取り配列に収めたいたいのですがどうしたらいいでしょうか? 入力:3 4 5 scanf("%d %d %d", &a, &b, &c); の様にしたいのですが受け取る数値の数はその都度変わります。 よろしくお願いします。

  • テキストデータの読み込みについて

    C言語のテキストデータの読み込みについてです。 C言語のプログラムについてです。 2444,1114,2807, 1984,2845,2086, 658.1,-1564.0,1239.7, -102.0,958.4,123.1, 12.7,6.0,82.7 2439,1110,2802, 1973,2865,2108, 658.8,-1563.7,1239.6, -102.0,957.1,121.9, 12.8,6.0,82.7 2441,1106,2806, 1967,2888,2124, 659.4,-1563.5,1239.5, -102.2,956.4,121.0, 12.8,6.1,82.8 2440,1109,2808, 1964,2896,2127, 660.0,-1563.3,1239.4, -102.7,956.2,120.7, 12.8,6.1,82.8 2441,1112,2807, 1981,2894,2120, 660.6,-1563.0,1239.4, -103.3,956.2,120.1, 12.8,6.1,82.8                                       ↑ 上の様なカンマとスペースで15個に区切られているtxtファイルがあるのですが、このtxtデータの10コ目と11コ目をを計算で使いたく、取り出したいと考えているのですがscanfを使いどのように取り出すことが出来るのか、また取り出したデータから数値を引くことを教えて頂きたいです。 つまり -102.0   958.4 -102.0   957.1 -102.2 と 956.4 -102.7   956.2 -103.3   956.2,             を取り出して計算に使いたいです。 そして1番上の数値だと、 -102.0と958.4 を読み込み、例えばそれぞれ100を引いた値を配列に入れたいです。 -102.0と958.4 → -202.0 と 858.4 のように取り出したいです。 教えて頂きたいです。お願いします。

  • エクセル・1セル内の合計の算出方法について(エクセル2000)

    1つのセルに('4,1,2,1,1,1,1,1")と入力されている数値の合計を算出する方法はありますか? ” , (カンマ)”がテキストで認識されている為、 カンマ 区切りでの個々の分解が出来ません。また、数値の個数も行により異なります。

  • フェルミとボーズ統計で・・・

    準位の数がM個で粒子の数がN個の場合について、取りうる全配列の総数(可能な{n0,n1,n2・・・nM}が何個あるか)を求める一般的な公式をフェルミ統計とボーズ統計の場合で教えてください。