• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:c言語でcsvファイルを配列に入れたいのですが)

C言語でCSVファイルを配列に入れる方法とは?

このQ&Aのポイント
  • C言語でCSVファイルを読み込んで配列に入れる方法について教えてください。
  • 旧字体と新字体の対応表を含むCSVファイルを配列に入れて操作したいです。
  • 具体的には、旧字体と新字体を1列に並べて表示する方法が知りたいです。

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

  • ベストアンサー
回答No.1

前の関連質問 http://oshiete1.goo.ne.jp/qa5512520.html http://oshiete1.goo.ne.jp/qa5506659.html >csvファイルを配列に入れるところからこんがらがっています。 どんな配列に、どういう形で入れたいの?

yxia001
質問者

補足

まずint hairetu1[59][3]という形をとりたいと思っています。 そのあと操作して、この配列を旧字体だけの1列の配列に入れて、 int hairetu2[59] という形にしたい。 また、その旧字体に対応した並びの新字体の配列を1列用意したいんです。 int hairetu3[59] こんな感じで作りたいんです。

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

その他の回答 (3)

  • titokani
  • ベストアンサー率19% (341/1726)
回答No.4

あと、UTF-8なんですよね。 もし、変換対象のファイルもUTF-8であるなら、文字コードに変換はしないで、そのまま1バイト~4バイトの文字列として処理したほうが簡単だと思います。

全文を見る
すると、全ての回答が全文表示されます。
  • titokani
  • ベストアンサー率19% (341/1726)
回答No.3

> while( 1 == fscanf( fi, "%d,", &iVal ) ){ // "%d," の , に注目 配列に入れる以前に、ファイルから読み込めてないようですが。 iValの値は表示させてみましたか?

全文を見る
すると、全ての回答が全文表示されます。
  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.2

>csvファイルを配列に入れるところからこんがらがっています。 どんな風にこんがらがっているか、(作成途中の)ソースコードを さらけ出してみるとよいでしょう。

yxia001
質問者

補足

ソースは色々参考にしてこんな感じで書きました #include <stdio.h> #include <stdlib.h> int main(void) { FILE *fi; int kk = 0, nn = 0, iVal, iData[60][3]; if((fi = fopen( "csv.csv", "r" ))==NULL){ printf( "ファイルオープンエラー\n" ); exit( 1 ); } while( 1 == fscanf( fi, "%d,", &iVal ) ){ // "%d," の , に注目 iData[ kk ][ nn ] = iVal; nn++; if( 60 == nn ){ // 1行読み込み済み kk++; nn = 0; } } fclose( fi ); if( ( 60 != kk ) || ( 0 != nn ) ){ printf( "ファイルエラー[%d][%d]\n", kk, nn ); exit( 2 ); } }

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

関連するQ&A

  • c言語でハッシュを作るらしいのですが...

    c言語でハッシュを作るんですが、勉強不足のためいまいち理解が追いついていないのが現状です。昔の字体を、今の字体に変換するために下記の記述のあるファイル読み込むんですが、この2,3列目が昔の字体で、この文字があったら1列目の今の字体へのポインタを返すように配列に入れたいんです。誰かやり方をおしえてくれませんか?、 没,沒,歿 壱,壹,弌 奇,竒,綺 協,恊,叶

  • C言語 csv 配列

    CSVファイルを2次元配列に格納したいのですが、書き方がわかりません。 csvファイルは1024×2048の0と1のみで構成されています。 fp=fopen(path,"r"); for(j=0; j<1024; j++) { for(i=0; i<2048; i++) { char c; do{c=(getc(fp));} while(c==','||c=='\n'||c=='\r'); map[j][i] = c-'0'; } } このように書きできたと思ったのですが、どうもうまくいっていないみたいです。 どこが悪いのか、どういう風に書けばいいのか教えていただげれば幸いです。

  • A3縦用紙を横分割して、印刷したいのですが

    Wordの2003と2007で行う操作の新旧表があります。 最初は、新表だけA4縦で作成したのですが、旧表も急遽作成してと指示があり、左が旧。右が新にしたいと思いました。 ・A4縦を段組にし印刷 → 新旧の表が小さくなり、ボツ。 ・A4横を段組に印刷 → それでも小さくて、ボツ。 元がA4縦の為、仕方無しにA3横で印刷する事にしました。 しかし、配布する為、A3丸々では配布するのに丈が長すぎ、横で裁断し、実質A5横×2サイズ(A5サイズを横に繋げた形)にしたいのです。 横の段組は可能なのでしょうか? 不可能な場合、境界線を引く場合は、いちいち、適当なところに線引いて、修正していくしか道は無いのでしょうか? パパッと‥‥ここがセンターだと、分かる方法は有るのでしょうか?

  • C言語 配列について

    for(j=0;j<=maxpop;j++){ d[200][j]=d[200][j]/1000; printf("%5d\n",d[200][j]); } のd[200][j]だけの値が 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 1 1 1 3 8 6 7 10 16 10 19 25 32 50 42 72 85 98 126 157 182 210 264 237 288 321 363 374 385 370 446 425 401 383 351 373 292 296 279 199 204 159 116 84 69 57 49 22 16 5 3 5 1 0 0 0 0 0 0 0 0 0 0 0 0 となり、これをそれぞれ1000で割った値(d[200][j]/1000)を出したいのですが、うまくいきません。 すべて値が0.000となってしまいます。 どうすればよいでしょうか? 何が間違っていますか? 教えてください。

  • 【c言語】配列について

    現在c言語で下記のようなものを作成したのですが、 最大残金月(maxrestn)を最大12ヶ月分表示させるための方法がどうしても思いつきません。 配列を使って表示させるためにはどうしたらよろしいでしょうか?  13月以上になるのは承知の上なのでスルーでお願いします。 #include <stdio.h> main(){ int m,n,N,income[13],rent=50000,food[13],light[13],outgo[13], rest[13],totalrest=0,maxrest=-100000,maxrestn; printf("何月から始めますか?"); scanf("%d",&m); printf("何ヶ月分のデータを入力しますか?"); scanf("%d",&N); printf("\n\n"); for(n=m; n<N+m; n++){ printf("%d月の収入は?",n); scanf("%d",&income[n]); printf("食費は?"); scanf("%d",&food[n]); printf("光熱費は?"); scanf("%d",&light[n]); outgo[n]=rent+food[n]+light[n]; printf("収入は%d円 支出合計は%d円\n",income[n],outgo[n]); if(income[n]>outgo[n]) printf("%d月は黒字でした\n",n); else if(income[n]==outgo[n]) printf("%d月は収支ちょうどでした\n",n); else printf("%d月は赤字でした\n",n); rest[n]=income[n]-outgo[n]; printf("残金は%d円で\n",rest[n]); totalrest=totalrest+rest[n]; printf("全残金は%d円です\n\n",totalrest); if(rest[n]>=maxrest){ maxrest=rest[n]; maxrestn=n; } } printf("最も残金の多かった月は%d月で、その金額は%d円です",maxrestn,maxrest); return 0; }

  • c言語 配列

    関数の中で複数の値を配列で返したいのですが,どうすればいいでしょう? 配列を関数に渡す時にはアドレスが渡されるので,ポインタと同様関数内で値を変えればmain関数の値も変わるのではないかと思ったのですが,上手くいきません. 知りたいのは,main関数の中の配列(できれば2次元配列)の値を他の関数から値を変更する方法です.下のプログラムはためしに書いてみたものです.質問を理解するうえで役立てば幸いです. #include<stdio.h> void func(double aaa[][3] ,double bbb[]); void main(void){ double array_a[3][3]={{1,2,3},{4,5,6},{7,8,9}}; double array_b[3]={0}; func(array_a,array_b); } void func(double aaa[][3] ,double bbb[]) { int i,j; for (i=0;i<3;i++) { for (j=0;j<3;j++) { bbb[i]=bbb[i]+aaa[i][j]; } } }

  • C言語配列

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

  • C言語の2次配列

    4行5列の配列を用意し、その配列の要素をtij(i=1~4, j=1~5)とするとき、tij=i×j となるように配列に値を入れ、 それを表の形で画面に表示するプログラムを作りなさい。  という問題なんですが、自分は下の様に組みましたがうまく動きません。どこが悪いのか教えてください。よろしくお願いします。あまりC言語を理解していないので申し訳ないですが、なるべく簡単に教えて頂ければ幸いです。 #include<stdio.h> int main(void) { int i,j; int t[4][5]; for(i=0;i<=3;i++) { for(j=0;j<=4;j++) t=i*j; printf("%5d",t); printf("\n"); } return 0; }

  • C言語で巨大配列を作るにはどうすれば良いのでしょうか?

    C言語で巨大配列を作るにはどうすれば良いのでしょうか? テストで作ってみた配列を用いたプログラムが動かなかったので(コンパイルは正常)、なんでだろうと思って調べてみると、巨大な配列はcalloc関数等を用いて作る必要があると知りました。 しかし正直解説サイトを見てもよく意味が分かりませんでした…。 例えばA[1000][1000][1000]の様な配列は、どの様に作ればいいのでしょうか? A[x][y][z]みたいに表現して、Aを変えて同じ様な配列を8個ほど作りたいです。 初心者なので勉強不足かも知れませんが、どうぞ宜しくお願い致します。

  • C言語 配列

    ご質問させていただきます。 CSVファイルからデータを呼び出し、二次元配列として出力したいのですが上手くいきません。 CSVファイルには英数字が混ざっており、エクセルでいう、11行と1440列ほどのデータがあります。初心者なりに書いてみたのですが、どこから手を付けたらいいかわかりません。 三次元配列にしないといけないとのアドバイスをいただいたのですがどのようにすればいいかわかりませんヒントを頂けるとたすかります。 元のcsvファイルは例ですがこのような下記のような構造になっていて2行目にいったときに[0][0]から[1][0]と変わっていってほしいです。 testt,esttest,testte,stte,sttest testte,sttes,ttest,~ 理想 [0][0] = [testtesttest] [0][1] = [testtesttesttest] 一行が終わりしだい [1][0] = [testtesttesttest] と変わっていくようにしたいです。 エラーが出ますが、コードを記載させていただきます。 コード #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> int main(void) { //ストリームポインタ FILE *fp; int kk = 0; int nn = 0; int hoge; //ファイルから読み込んだテキスト1行分を格納するためのchar配列を指定します int piyo[11][1440]; //*filename : 開くファイル名を指定 char *fname = "./test1/test2/201509/test.csv"; //ファイルが無かったり,指定フォルダでなければ、FILE変数fpはNULLが返ります。 fp = fopen(fname, "r"); //NULLが返ってきた場合の処理 if (fp == NULL) { printf("%sファイルが開けません¥n", fname); return -1; } //ファイルから1行ずつ読み込む成功すると、読み込んだ文字列のポインタを返し、失敗すると、NULLを返します。 while (1 == fscanf(fp, "%c,", &hoge)) { piyo[kk][nn] = hoge; printf("[%d][%d]=%d\n", kk, nn, piyo[kk][nn]); nn++; if (1440 == nn) { kk++; nn = 0; } } //FILE *fp : fopen()で取得したファイルポインタ fclose(fp); return 0; }