• 締切済み

C言語でテキストファイル内の行列を配列に格納する方法

C++6.0を使っています。 -0.30192   -0.01216 ・・・  0.055553 0.109746   -0.01408 ・・・  0.087976    ・        ・    ・      ・    ・        ・       ・   ・    ・        ・           ・ -0.31596   -0.05106 ・・・  0.041131 上のような行数約1500、列数7のデータがテキストファイルに保存されている時、次のような配列 data[2000][7] にひとつずつ格納する方法を知りたいです。 初心者なのでネットで調べてみてもよく分かりませんでした。 よろしくお願い致します。

みんなの回答

  • yama5140
  • ベストアンサー率54% (136/250)
回答No.4

★1行ずつ char型の変数に読み込む。 ★読み込んだ、文字列を先頭から7つに区切り、実数へ変換・代入する。  char cBuf[128]; // 最大レコード長より大  int  i, iTop, iLine = 0;  ・  (ファイルオープン略)  ・  while( NULL != fgets( cBuf, 128, fp ) ){   iTop = 0;   for( i = 0; i < 7; i++ ){    data[iLine][i] = atof( &cBuf[iTop] ); // 変換・代入    iTop += 9; // 次の数文字列の先頭   }   iLine++;   ( 2000行 over 時のエラー処理略)  } ☆質問者様の例のように、全レコードの仕様が同じ場合のみ適応します。  なお、レコード毎に仕様が異なる場合はデリミタを判定し、iTop を定めます。

  • php504
  • ベストアンサー率42% (926/2160)
回答No.3

fopen( ); for (i = 0; i < 2000; i++) { fgets( ); sscanf( ); /* or fscanf( ); */ } fclose( ); 自分が思いつく流れとしてはこんな感じですね。

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

質問文からすると、テキストファイルから1行ずつ読み込む処理すらあやふやということでしょうか? まずは自分でコードが書けたところまでを補足してもらわないと、どのくらい回答すればいいのかわからず困る。

  • taku2888
  • ベストアンサー率60% (15/25)
回答No.1

for文などで、分解して取り込む関数を一つ作るのが一番早いかと・・・

関連するQ&A

  • 【C#】テキストファイルを2進数で取得&配列に格納

    http://okwave.jp/qa/q7812279.html 前回の質問が分かりにくかったため、もっと詳しく書いていこうと思います。 テキストファイルを1行ずつ読み取り、それをbyte型に保存したいです。 例:test.txt 01001000 01110000 01010100 11100110 01010101 ↑のような8桁の2進数がテキストファイルに記入されています。 そのテキストファイルを読み取り、 byte配列に格納したいです。 例: byte[0]に01001000 byte[1]に01110000 byte[2]に01010100 byte[3]に11100110 上記のようにデータが格納されるよう、 ファイルを読み取り、配列に入れたいと思っています。 C#初心者のため、右も左も分からないのですが、 とりあえず、やろうとしている流れを以下に書きます。 (1)ファイルを読み込む (2)ArrayListに格納 (3)データ変換(文字列を2進数に) (4)データの出力(byte型) ArrayListでなくても構わないのですが、 他にいい方法が思いつかなかったので…。 言いたいことがぐちゃぐちゃになってきたのでまとめると、 byte[0]にファイルから読み取った1行のデータ(01001011等)を byte型で入力したい。 ということです。 分からなければ、コメントお願い致します。 文章が雑で分かりにくいかもしれませんが、回答頂けると嬉しいです。

  • C#で、ファイルのデータを取得し、配列に格納

    C#を始めたばかりで分からないことも多いため、質問させていただきます。 C#で、テキストファイルにある2進数の数値 例: 00111100 11111100 00010100 のような8桁のデータをC#でテキストファイルから2進数のまま読み取り、 配列に格納したいです。 上の例で考えると、 byte[0]に 00111100 byte[1]に 11111100 byte[2]に 00010100  のデータが入力されているような感じです。 ArrayListを使用する方法や、 バイナリファイルで読み込む方法などもあると思うのですが、 データを1行ごとに配列に入力し、 それを見た目どおり2進数として格納する方法が分かりません。 やはり、文字コードなどを参考に、 1文字ずつ格納し、引き算していくしか方法はないのでしょうか? 文章が分かりにくくて申し訳ないのですが、回答いただけるとありがたいです! よろしくお願いいたします。

  • ファイルの読み込み、配列に格納

    お世話になります。Java初心者です Javaプログラムを実行する同じディレクトリにあるテキストファイルとデータファイルをコマンドラインで同時に読み込み それぞれ違う配列に格納したいのですが、1つのファイルの読み込みは出来ても2つ同時の読み込みと配列格納でつまづいています。 読み込むテキストファイルには以下のような1行の文が、 Dr. Fujita is great! 読み込むデータファイルには以下のような文字が書かれています。 AC 4C 7C 10C KC 3D 6D 9D QD JB 3C 6C 9C QC 2D 5D 8D JD JA 2C 5C 8C JC AD 4D 7D 10D KD 配列に格納する際、テキストファイルの場合は全て大文字にし、アルファベット以外の記号(スペース含)は全て消して配列に格納します。 上の例でいえばこのような状態で格納です↓ DRFUJITAISGREAT データファイルの場合は、2組1文字をそのまま配列に格納です。ただしスペースは飛ばします。 上の例でいえば、ACを配列0に、4Cを配列1に、7Cを配列2に、、、と格納していきます。 import java.io.*; public class sample{ public static void main(String[] args){ try{ FileReader f = new FileReader(args[0]); BufferedReader b = new BufferedReader(f); Strings; while((s=b.readLine())!=null){ System.out.println(s); ←読み込んでるか確認 } }catch(Exception e){ System.out.println(no file); } } } ファイルの指定は実行時に、java sample datafile.dat textfile.txt と指定します。 読み込むプログラムは以上のように書いたのですが、2つファイルを読み込むにはどのように記述したらよいのでしょうか。 FileReaderを2つ作成?しても最初に指定したデータファイルの内容がまた読み込まれるだけで・・・ 読み込んだら変数sに入りますが、たとえばs.substring()なんかでわけて配列に入れようとしても、s.substring()←ここでエラーが出てしまいます。 あと、Dr. Fujita is great!のアルファベットを大文字にし、記号(スペース含)を飛ばして格納するにはどうしたらよいのでしょうか。 宜しくお願いします

    • ベストアンサー
    • Java
  • C言語配列

    c言語初心者ですよろしくお願いします。 ファイルから読み込んだ100万件のデータをstaticを使わずに配列に格納したいのですが。 どういった方法があるでしょうか? 私のpcでは変数名[10000]くらいがエラーのでない限界みたいです。

  • C言語において、以下の条件下で、配列rbufに格納されているデータを配

    C言語において、以下の条件下で、配列rbufに格納されているデータを配列HEXに移動する方法を教えてください。 なお、C言語超初心者ですので、意味不明なことを書いてしまう可能性もありますが、宜しくお願いします。 まず、配列に関しては、 char rbuf[256]; char HEX[256]; と定義されているとします。 そして rbuf にはテキストデータが入っているものとします。 このrbufに入っているテキストデータを、16進数に変換して順番にHEXに格納したいのです。 (rbuf[1]に入っているデータを16進変換してHEX[1]に、 rbuf[2]に入っているデータを16進変換してHEX[2]に……という具合に。) お分かり頂けましたでしょうか? ちなみに以下のようなことを試してみましたがダメでした。 for(i=0;i < sign;++i){ sprintf(HEX,"%02X",rbuf[i]); } ※(signにはrbufに格納されているデータ数が入っています。) 当たり前ですが、上のように書くと、HEXは次々と上書きされ、 一番最後のデータしか入りません。 かといって次のように書くと、文法的に間違っているようでコンパイルエラーになります。 for(i=0;i < sign;++i){ sprintf(HEX[i],"%02X",rbuf[i]); } どうすればよろしいのでしょうか?

  • テキストファイルの各行を配列に格納するには?

    お世話になります。vb6でテキストファイルを読み込み、各行を配列に格納するコードを教えて下さい。

  • C# 配列の配列(多次元配列?)

    C#において、配列の配列中に格納した値を、検索することを 行いたいのですが、格納した値そのものを見ることができません。 まだ、C#を始めて間もないので、配列に格納する時点で、 不備があるかも知れませんが、お願いします。 やりたいこと ・テキストファイル内にある値を、2次元配列または、多次元配列に格納 ・配列に格納した値で、データチェックなどを行う予定  テキストファイル内のデータは、下記内容となり要素数も固定ではなく変動する   A=1,2,3・・・   B=11,22,33・・・ 実際のソースは、 //配列 ArrayList list = new ArrayList(); //配列格納 1レコード毎用 ArrayList listtmp = new ArrayList(); while ((strGenderTextLine = objReader.ReadLine()) != null) {  string strBuffer;  //「=」前の値格納用変数  string[] strBuffer2; //「=」後の値格納用配列  listtmp=null;  //strtmpに「=」前の値を格納  strtmp = TextLine.Split('=').GetValue(0).ToString();  //strtmp2に「=」後の値を格納(配列)  strtmp2 = TextLine.Split('=').GetValue(1).ToString().Split(',');  for (int i = 0; i <= strtmp2.Length - 1; i ++)  {   //[i,0]に、「=」前の値を代入   if (i == 0)   {   listtmp.Add(strtmp);   }   else   {   listtmp.Add(strtmp2[i].ToString());   }  }  //list配列にlistTmp配列を格納(配列の配列)  list.Add(listtmp);  intT = intT + strtmp2.Length;  //行数カウント  intTLine = intTLine + 1;  } ここから、配列「list」内に入っている値を閲覧することができる方法を教えていただければと思います。 宜しくお願いいたします。

  • C言語 文字列格納

    テキストファイルから整数データ又は文字列を読み込んで配列に格納する動作についての質問です。 テキストファイルが1行区切りの整数型なら1次元配列で for(i = 0; i < maxSize; i++) { fscanf(fp,"%d", &data[i]); } テキストファイルが1行区切りの文字列なら2次元配列で for(i = 0; i < MAXSIZE; i++) { if (fscanf(fp,"%s", &data[i][300]) == EOF) break; } for(j = 0; j < i; j++) printf("%s\n", data[j]); みたいな具合に格納できたんですが、 テキストファイルが1行区切りのデータではなく、空白文字区切りの文字データだった場合、それぞれどのようにして配列に格納すればいいかがわかりません。 イメージとしては、1文字目から見ていって空白が出ればそこで切って格納していくというかんじなのですが・・・ 質問の内容がわかりにくいかもしれませんが、是非教えてください。お願いします。

  • C++で、テキストファイルを一行ずつ読み込んで配列に入れたいのですが、

    C++で、テキストファイルを一行ずつ読み込んで配列に入れたいのですが、うまくできません! テキストには -3.0        1.0        2.0 ・・・などのように一行に一つの数値が入って縦に並んでいます。 それをひとつずつ読み込み、新しい配列(たとえばa[])に順番にいれたいのです。 a[1]=-3.0,a[2]=1.0、・・・と なるように。 どうか、この初心者にご指導お願いいたします。

  • テキストファイルを二次元配列に

    お世話になります。 テキストファイルを1行ずつ読み込んで二次元配列に格納するプログラムですが、 //最大行数 #define LINE_MAX 10 //行内最大文字数 #define INPUT_MAX 128 char str[LINE_MAX][INPUT_MAX]; というようにして実現しています。 これを行数が分からないテキストファイルでも大丈夫なようメモリを動的に確保したいと考えています。 二つの次元の内、一つを動的に確保するにはどのようにしたら良いでしょうか。

専門家に質問してみよう