• 締切済み

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'; } } このように書きできたと思ったのですが、どうもうまくいっていないみたいです。 どこが悪いのか、どういう風に書けばいいのか教えていただげれば幸いです。

みんなの回答

  • wormhole
  • ベストアンサー率28% (1622/5659)
回答No.4

>C言語は初心者であまり理解できていませんでした。 getc()の戻り値の型はなんですか。

takano1128
質問者

補足

int型です。

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

>キャラ画像が1に位置する所にいる場合操作できるとしたのですが、本来1である場所に画像があるけど>>も、操作が出来ないので格納ができていないと解釈しました。 動かしました。問題なく格納されています。

takano1128
質問者

補足

移動のほうは、このように書いたのですが if( map[(int)gPos.y][(int)gPos.x] == 1) { gPos.x-=1; } 格納が出来ているならば、こちらが間違えていると考えたのですが、どこが間違えているのかわかりません。 もし宜しければ再度ご教授のほどお願いいたします

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

本題とは関係ないけど char c; はダメだろ~

takano1128
質問者

補足

C言語は初心者であまり理解できていませんでした。 できれば、どのような理由でいけなくて、どういう風に書いたらよろしいのか教えていただければ有難いです。

全文を見る
すると、全ての回答が全文表示されます。
  • maiko0318
  • ベストアンサー率21% (1483/6970)
回答No.1

>どうもうまくいっていないみたいです。 動かしたのですか?どのようにうまく行っていないですか? <みたいです。>ではわかりません。

takano1128
質問者

補足

キャラ画像が1に位置する所にいる場合操作できるとしたのですが、本来1である場所に画像があるけども、操作が出来ないので格納ができていないと解釈しました。

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

関連するQ&A

  • カンマ区切りのデータを配列に読み込みたい

    趣味でゲームを製作しているのですが、その中で、 マップデータのテキストファイルを二次元配列に読み込むようにしています。 データファイルは、カンマ区切りで、例えば、 1,2,3,4,5 5,4,3,2,1 1,2,3,4,5 というようになっています。 fp=fopen(path,"r"); for(j=0; j<3; j++) { for(i=0; i<5; i++) { char c; do{c=(getc(fp));} while(c==','||c=='\n'||c=='\r'); map[j][i] = c-'0'; } } 配列の各要素に読み込む中身が、0~9など1文字に限られている場合、このgetc()を使う方法で問題ないのですが、0~255など、文字数がまちまちになると、1文字を取り出すgetc()ではできなくなってしまいます。 これがどうすれば可能になるのか、情けないのですがちょっと思いつかないので、アドバイスを頂ければ幸いです。

  • Cで2次元配列にCSVファイルを格納するには?

    ~.csvというファイルがあって、ファイルの中身は256*256のある数字の2次元配列です。 このファイルを読み込んで、2次元配列に格納したいのですが、どのようなソースを書けばいいのでしょうか? プログラミングをちゃんと勉強してこなかったために苦戦しています。 #include <stdio.h> #include <stdlib.h> int main(int argc,char *argv[]){ FILE *fi; char I[256]; char J[256]; if((fi=fopen("ch.csv","r"))==NULL){//csvもこのような記述でよみこむことができるのか? printf("ファイルオープンエラー\n"); exit(1); } while(fgets(J,256,fi) != NULL) { これより先が全く書けていない状態です。 ここまでもこのソースで大丈夫でしょうか? かなり基本的なことだと思いますが、よろしくお願いします。

  • CSVファイル読込みのエラーに関して??

    下にプログラムの一部を書いてます。 このプログラムでは、b[g]にあたるCSVファイルを読み、 csv_value[j4][i4]に格納しようとしています。 しかし、すべての列で1列目の値が配列に格納されてしまいました。 間違いがわからずに困っています。 もし詳しい方がいましたら教えていただけないでしょうか? どうかよろしくお願いいたします。 char b[1000][50]; long g; long i4; long j4; char str0[500000]; long line_number; g=0; fp = fopen(b[g],"r"); for(i4=0;i4<line_number;i4++){ fgets(str0,500000,fp); for (j4=0;j4<32;j4++){ csv_value[j4][i4]=atoi(strtok(str0,",")); } }

  • csvファイルを配列へ格納しブラウザへ出力

    <?php #CAT csvファイルを開く $fp_c = fopen("test.csv","r"); #domain csvファイルを開く $fp_domain = fopen("test.csv","r"); print "<table border='1'>"; #fgetcsv関数がfalseを返却するまで実行 while($c_data = fgetcsv($fp_c)){ print "<tr>"; #csvファイルの列数だけ実行 for($i=0;$i<count($c_data);$i++){ print "<td>".$c_data[$i]."</td>"; } print "</tr>"; } print "</table>"; var_dump($c_data); fclose($fp); ?> このようなプログラムをつくってcsvファイルの各セルを配列$c_data[$i]へ格納している(つもり) なのですが、var_dump($c_data);を入れると bool(false)と表示されてしまいます。 このプログラムではcsvファイルの中身を表示できても配列に格納されていないのでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • csvファイルを読み込んで二次元配列に格納したい

    200×250のある数字と文字の入力されたcsvファイル(またはtxtファイル)を読み込んで2次元配列に格納したいのです。 色々調べるとカンマの処理が必要ということがわかりましたが、どのようにソースを書けばよいかわかりません。使用言語はC言語です。 また、実際にcsvファイルを読み込むようにプログラムを書いてみましたが、すべて-858993460となって表示されます。 プログラミング初心者で勉強中なため困っています。 回答よろしくお願いします。 #include <stdio.h> #include <stdlib.h> #define row 200 #define column 250 int main() { int i, j; int data[row][column]; FILE *fp; fp = fopen("sample.csv", "r"); if (fp == NULL){ printf("ファイルがありません\n"); return 1; } for (i = 0; i < row; i++){ for (j = 0; j < column; j++){ fscanf(fp, "%lf", &data[i][j]); } } for (i = 0; i<row; i++){ for (j = 0; j < column; j++){ printf("%3d ", data[i][j]); } printf("\n"); } fclose(fp); return 0; }

  • C言語でのCSVファイルの読み出し方法

    C言語の勉強をしています。 test.csvというファイル名のCSVファイルで 項目,名前,身長,体重,血液型,合否(合格なら○不合格なら空欄) 1,太郎,150,55.6,A,○ 2,二郎,165.5,60,B 3,三郎,160.2,59.5,AB,○ と書かれたファイルを読もうと思いまして #include <stdio.h> #define i 1000 #define j 1000 main() { int d[i][j]; double... FILE *fp; fp=fopen(fp,"test.csv","r"); for(i=0;i<=2;i++) { for(j=0;j<=6;j++) { fscanf(fp,"%d",d[i][j]); } }... という感じで書いても読み込みません。 どのように書いたら読み込むでしょうか。 Cをはじめて間もないのでどなたか教えていただけないでしょうか よろしくお願いします。

  • 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; }

  • scanf C言語

    現在取得したデータを多次元配列いれたいのですが、カンマまでの文字列を入れる方法がわかりません。例で言いますと jgasogasog,dklafh343,fdjalsjfd,kldjfas5 dfasfdas6ff ,fsadfa6sg,dgas6dsa,fsdafa もカンマまでの文字列array[0][0] = jgasogasog array[0][1] = dklafh34 といった形で入れていきたいです。 ご迷惑おかけしますが何卒よろしくお願いします。 途中まで作ったソースをのせます。 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include<string.h> #define piyo 2 #define hoge 1400 int main(void) { FILE *fp; char test[10][500]; int n = 0; if ((fp = fopen("testfile.csv", "r")) == NULL) { printf("\aファイルをオープンできません\n"); return(0); } int i, j; int k = 0; //ファイルfpの終端指示子をチェックします。 while (!feof(fp) && k < 500) { //%cは一文字出力をしてくれる使用データ型はchar型 //fscanf関数は書式指定をしてファイルから値を読み込み、バッファに格納します。 for (i = 0; i < 10; i++) { for (j = 0; j < 500; j++) { fscanf(fp, "%[^,],%d", &test[i][j]); k++; } } } for (i = 0; i < 10; i++) { for (j = 0; j < 500; j++) { printf("test[%d][%d]=%d\n", i,j,test[i][j]); } } fclose(fp); return(0); } 似たような質問をしてすいません。

  • 配列のサイズ変更

    FILE *fp; char *fname = "test.txt"; unsigned char init[300]; int i = 0; int c; fp = fopen( fname, "r" ); if( fp == NULL ){ printf( "%sファイルが開けません\n", fname ); return -1; } while( (c = fgetc( fp )) != EOF ){ init[i] = c; i = i+1; } fclose( fp ); 自分のプログラムの中のこのようなテキストから文字を読んで配列に格納するような動作の中で、initを大きめにとっておいて配列に格納し終わったら余った空の配列を削除する、という機能を拡張したいのですがどのようにすればいいかわかりません。 どなたか教えていただけないでしょうか?

  • C言語  二次元配列

    C言語をやることになり苦戦しています。 CSVファイルからデータを呼び出し、二次元配列として出力したいのですが上手くいきません。 CSVファイルには英数字が混ざっており、エクセルでいう、11行と1440列ほどのデータがあります。初心者なりに書いてみたのですが、どこから手を付けたらいいかわかりません。 是非ヒントを頂けるとうれしいです。よろしくお願いします。 理想 [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; }