test.csvの内容を表示するプログラム

このQ&Aのポイント
  • test.csvの内容を表示するプログラムを作成しましたが、コンパイル後実行するとエラーが発生します。
  • プログラムはファイルから1行ずつ読み込み、カンマで区切られた各項目を構造体に保存して表示します。
  • エラーの原因は、ファイルポインタが初期化されていないことです。fpの初期化を行うことで問題を解決できます。
回答を見る
  • ベストアンサー

test.csvの内容

test.csvの内容 "a","b","c","d" "e","f","g","h" "i","j","k","l" "m","n","o","p" "q","r","s","t" "u","v","w","x" "あ","い","う","え" "か","き","く","け" "さ","し","す","せ" "た","ち","つ","て" とし、真ん中のq,r,s,t以降の内容を表示させたく、下のようなプログラムを作成しました しかし、コンパイル後実行しようとするとエラーになってしまいます。どう直したらよいか教えて頂けますでしょうか? #include <stdio.h> #include <stdlib.h> #include <string.h> #define NAME "test.csv" #define SIZE 32 struct tb{ char a[SIZE]; char b[SIZE]; char c[SIZE]; char d[SIZE]; }; int main(void) { struct tb test; FILE *fp; char buff[SIZE]; long pos; pos=ftell(fp); fseek(fp,pos,SEEK_SET); while(fgets(buff,SIZE,fp) != NULL){ //各項目の設定 strcpy(test.a,strtok(buff,",\"")); strcpy(test.b,strtok(NULL,",\"")); strcpy(test.c,strtok(NULL,",\"")); strcpy(test.d,strtok(NULL,",\"")); printf("%s %s %s %s \n",test.a,test.b,test.c,test.d); } }

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

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

#5です。質問を良く読んでいませんでした(申し訳ない)。 >真ん中のq,r,s,t以降の内容を表示させたく、・・・ とのことですので、whileは省略してはならず。質問のプログラムを用いることになります。失礼しました。  せっかくですので、やっていることの説明を付けておきます。 /* これは回答プログラムです */ #include <stdio.h> #include <stdlib.h> #include <string.h> #define NAME "test.csv" #define SIZE 32 #define ALL 6 struct tb{ char a[SIZE]; char b[SIZE]; char c[SIZE]; char d[SIZE]; }; struct set2 { char word[4]; //設定文字(列) long offset; //file position }; int main(int argc, char *argv[]) { struct tb test; FILE *fp; char buff[SIZE]; long pos; int i; char *search; //検索文字 struct set2 table[ALL]= { //abcのみで失礼 "b",0, "f",8, "j",16, "n",24, "r",32, "v",40 }; if(argc!=2) return 1; search=argv[1]; fp=fopen(NAME,"r"); //data table からオフセット値を得る for(i = 0; i < ALL; i++) //もし、data table の検索文字(word)があれば脱 if(strstr(search, table[i].word) != NULL) break; //ただし、該当文字がなければエラー if(i >= ALL){ fclose(fp); return -1; } //file position は data table 番号i にある offset値をセット pos = table[i].offset; //ヘッドを指定 file position まで移動する fseek(fp,pos,SEEK_SET); while(fgets(buff,SIZE,fp) != NULL){ //各項目の設定 strcpy(test.a,strtok(buff,",\"")); strcpy(test.b,strtok(NULL,",\"")); strcpy(test.c,strtok(NULL,",\"")); strcpy(test.d,strtok(NULL,",\"")); fclose(fp); printf("%s %s %s %s \n",test.a,test.b,test.c,test.d); } fclose(fp); return 0; } /* これは上とは違う別物の参考プログラムです */ #include <stdio.h> #include <string.h> #define SIZE 128 #define ALL 10 int main(void) { char buff[SIZE]; int seek_point, i = 0; FILE *fp; char *key, *pref[] = {"b","f","j","n","r","v","い","き","し","ち"}; fp = fopen("test.csv", "r"); //最初の検索文字をセット key = pref[i]; //現在の file position をセット seek_point = ftell(fp); //file を1行読み込む while(fgets(buff,SIZE,fp) != NULL) { //検索文字があれば if(strstr(buff, key) != NULL) { //検索文字とfile posiion を出力する printf("%s %d\n", pref[i], seek_point); //ただし、次の file position が eof で有るならば loop 脱 if(++i >= ALL) break; //次の検索文字をセット key = pref[i]; } //現在の file position をセット seek_point = ftell(fp); // while() の先頭へ } fclose(fp); return 0; }

yamaomoto
質問者

補足

ありがとうございます。参考にさせていただきました。

その他の回答 (5)

回答No.5

test.csvファイルは「 "" 」のダブルクォーテーションを省いた   a,b,c,d   e,f,g,h   i,j,k,l   m,n,o,p   q,r,s,t   u,v,w,x   あ,い,う,え   か,き,く,け   さ,し,す,せ   た,ち,つ,て とするとき、コマンドラインから「 ./a.out r 」と入力することで検索できます。a.out に続く引数を b,f,j,n,r,vとそれぞれ引数を換えて実行してみてください。 /* これは回答プログラムです */ #include <stdio.h> #include <stdlib.h> #include <string.h> #define NAME "test.csv" #define SIZE 32 #define ALL 6 struct tb{ char a[SIZE]; char b[SIZE]; char c[SIZE]; char d[SIZE]; }; struct set2 { char word[4]; long offset; }; int main(int argc, char *argv[]) { struct tb test; FILE *fp; char buff[SIZE]; long pos; int i; char *search; //検索文字 struct set2 table[ALL]= { //abcのみで失礼 "b",0, "f",8, "j",16, "n",24, "r",32, "v",40 }; if(argc!=2) return 1; search=argv[1]; fp=fopen(NAME,"r"); //データ・テーブルからオフセット値を得る for(i = 0; i < ALL; i++) if(strstr(search, table[i].word) != NULL) break; if(i >= ALL){ fclose(fp); return -1; } pos = table[i].offset; //ヘッドを移動する fseek(fp,pos,SEEK_SET); //メイン処理(文字記憶位置が指定されることから whileは不要) fgets(buff,SIZE,fp); //各項目の設定 strcpy(test.a,strtok(buff,",\"")); strcpy(test.b,strtok(NULL,",\"")); strcpy(test.c,strtok(NULL,",\"")); strcpy(test.d,strtok(NULL,",\"")); fclose(fp); printf("%s %s %s %s \n",test.a,test.b,test.c,test.d); return 0; } これに使われた table の offset 値は以下のプログラムから求められたものです。 /* これは参考プログラムです */ #include <stdio.h> #include <string.h> #define SIZE 128 #define ALL 10 int main(void) { char buff[SIZE]; int seek_point, i = 0; FILE *fp; char *key, *pref[] = {"b","f","j","n","r","v","い","き","し","ち"}; fp = fopen("test.csv", "r"); key = pref[i]; seek_point = ftell(fp); while(fgets(buff,SIZE,fp) != NULL) { if(strstr(buff, key) != NULL) { printf("%s %d\n", pref[i], seek_point); if(++i >= ALL) break; key = pref[i]; } seek_point = ftell(fp); } fclose(fp); return 0; }

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.4

> pos=ftell(fp); > fseek(fp,pos,SEEK_SET); この行、意味無いように思えるんですが。 それから、 fopenを付け加えるのは、この ps=ftell(fp); の前である必要がありますが、それは大丈夫ですか? 「whileの前」が直前の意味だったら、 ftellが不正なfpに対して実行されるので誤動作する可能性が高いですが。

yamaomoto
質問者

補足

ありがとうございます。参考にさせていただきました。

  • Hardking
  • ベストアンサー率45% (73/160)
回答No.3

strtokの¥は不要だと思います。 strcpy(test.a,strtok(buff,",")); strcpy(test.b,strtok(NULL,",")); strcpy(test.c,strtok(NULL,",")); strcpy(test.d,strtok(NULL,","));

yamaomoto
質問者

補足

「"」も削除しちゃいたいのでこれでいいかとは思いますが・・・

  • anicicle
  • ベストアンサー率36% (129/356)
回答No.2

>Segmentation faultでてしまいました。 「Segmentation fault」はメモリアクセスに問題がある場合に発生する。 ここで問題が出る可能性があるのは、バッファ操作を行うstrcpy()とstrtok()。 その部分を重点的に見直すこと。

  • Yanch
  • ベストアンサー率50% (114/225)
回答No.1

ファイルをオープンしている処理と、ファイルをクローズしている処理が見当たりませんよ。

yamaomoto
質問者

お礼

訂正 >>while文の後に while文の前にでした

yamaomoto
質問者

補足

初歩的でしたね。しかし、 while文の後に if((fp=fopen(NAME,"r"))==NULL){ printf("ファイル%sが開けません\n",NAME); return -1; } と whileを抜けた後にfcloseして、コンパイル・実行しましたが、Segmentation faultでてしまいました。

関連するQ&A

  • test.csvの内容が以下のように100件位あったとして、

    test.csvの内容が以下のように100件位あったとして、 d,4,ddddd bb,2,bbbbb a,1,aaa cc,3,ccccc 以下略 やりたい事としてtest.csvを2列目をキーとして昇順にソートし、新たなファイル「test1.csv」(こちらは全件表示)に書き込み、 また、test1.csvのキリのいい所だけ抜き出したcsvファイル「test2.csv」(1件目、10件目、20件目、…と以下10の倍数毎のデータだけを書き込む) を作りたいと考えて下の様なプログラムを作っていますが、ソートの段階で詰まっています。 もしよろしければこの続きを教えて頂けないでしょうか? #include <stdio.h> #define MBF 256 #define SIZE 32 #define FNAME1 "test.csv" #define FNAME2 "test1.csv" #define FNAME3 "test2.csv" struct tb{ char a[SIZE]; char b[SIZE]; char c[SIZE]; }; int main(void) { struct tb tbl[20]; struct tb *tp; int ntb,itb; FILE* fi; FILE* fo; FILE* fq; char buff[MBF]; //== 入力CSVファイルからの読み込み処理 == fi = fopen( FNAME1, "r" ); if( fi == NULL ){ printf( "ファイル\"%s\"が開けません\n", FNAME1 ); return -1; } while( fgets(buff, MBF, fi) != NULL ) { strcpy(test.a,strtok(buff,",\"")); strcpy(test.b,strtok(NULL,",\"")); strcpy(test.c,strtok(NULL,",\"")); } fclose( fi ); //== 出力CSV(test2.csv)ファイルへの書き込み処理 == fo = fopen( FNAME2, "w" ); if( fo == NULL ){ printf( "ファイル\"%s\"が開けません\n", FNAME2 ); return -1; } for ( itb=0; itb<ntb; itb++ ){ //書き込み処理? } fclose( fo ); //出力ファイルクローズ //== 出力CSV(test2.csv)ファイルへの書き込み処理 == fq = fopen( FNAME2, "w" ); if( fq == NULL ){ printf( "ファイル\"%s\"が開けません\n", FNAME3 ); return -1; } for ( itb=0; itb<ntb; itb++ ){ //書き込み処理? } fclose( fq ); //出力ファイルクローズ return 0; }

  • プログラム高速化について

    http://oshiete1.goo.ne.jp/qa5810041.html で質問させていただいた者です。 ソースは下ので動いているのですが、北海道近辺の郵便番号を調べようとするとすぐに結果が返ってくるのですが、 沖縄県辺りですと少し時間がかかってしまいます。(わずかな差ですが…) 恐らく、上から1個ずつしらみつぶしに調べているのでそのような結果になっているのはわかるのですが… これを高速化するにはwhile文をいじる必要があると思うのですが、どのようにしたら良いでしょうか? 以下がプログラムになります。 ken_all.csvの場所:http://www.post.japanpost.jp/zipcode/dl/kogaki.html #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #define NAME "ken_all.csv" #define SIZE 1024 #define setstr(x,z) {strcpy(x,strtok(z,",\""));} struct tb{ //構造体設定 char dummy[SIZE]; //全国地方公共団体コード char old_num[SIZE]; //旧郵便番号 char now_num[SIZE]; //現在の郵便番号 char kana1[SIZE]; //都道府県名(カナ) char kana2[SIZE]; //市区町村名(カナ) char kana3[SIZE]; //町域名(カナ) char kanji1[SIZE]; //都道府県名(漢字) char kanji2[SIZE]; //市区町村名(漢字) char kanji3[SIZE]; //町域名(漢字) }; int main(int argc, char *argv[]) { struct tb line; FILE *fp; char *address, buff[SIZE], string_buff[SIZE]; int flag; clock_t start,end; start = clock(); if(argc == 1){ printf("引数を指定してください\n"); } if(argc > 2){ printf("引数が多すぎます、引数は1つにしてください。\n"); return -1; } if((fp=fopen(NAME,"r"))==NULL){ printf("ファイル%sが開けません\n",NAME); return -1; } flag=0; address = argv[1]; while(fgets(buff,SIZE,fp) != NULL){ //各項目の設定 strcpy(line.dummy,strtok(buff,",\"")); strcpy(line.old_num,strtok(NULL,",\"")); strcpy(line.now_num,strtok(NULL,",\"")); strcpy(line.kana1,strtok(NULL,",\"")); strcpy(line.kana2,strtok(NULL,",\"")); strcpy(line.kana3,strtok(NULL,",\"")); strcpy(line.kanji1,strtok(NULL,",\"")); strcpy(line.kanji2,strtok(NULL,",\"")); strcpy(line.kanji3,strtok(NULL,",\"")); //文字の連結 strcpy(string_buff,line.kanji1); strcat(string_buff,line.kanji2); strcat(string_buff,line.kanji3); //住所の比較 if(strcmp(string_buff,address)==0){ printf("〒%s \n",line.now_num); flag=1; break; } //郵便番号の比較 if(strcmp(line.now_num,address)==0){ printf("%s \n",string_buff); flag=1; break; } } fclose(fp); if(flag==0 && atoi(argv[1]) == 0){ printf("「%s」に該当する郵便番号はありませんでした\n",address); } if(flag==0 && atoi(argv[1]) != 0){ printf("「%s」に該当する住所はありませんでした\n",address); } end = clock(); printf("%.30f秒かかりました\n",(double)(end-start)/CLOCKS_PER_SEC); return 0; }

  • csvファイルを構造体に格納したいです

    ファイル内容 ******************** あいう,,さしす たちつ,なにぬ,はひふ まみむ,, あいう,win, ******************** #include <stdio.h> #include <string.h> #define MBF 256 struct tb{ char aaa[32]; char bbb[32]; char ccc[32]; }; int main(){ struct tb tbl[20]; struct tb *tp; int ntb,itb; FILE* fi; FILE* fo; char buff[MBF]; // 入力 fi = fopen("sample.csv","r"); // 検査省略 if( fi == NULL ){ printf( "%sファイルが開けません\n" ); return -1; } ntb = 0; while ( fgets(buff,MBF,fi ) != NULL ) { strcpy(tbl[ntb].aaa,strtok(buff,",")); strcpy(tbl[ntb].bbb,strtok(NULL,",")); strcpy(tbl[ntb].ccc,strtok(NULL,",")); ntb++; } fclose( fi ); // 出力 fo = fopen("csvo.csv","w"); if( fo == NULL ){ printf( "%sファイルが開けません\n" ); return -1; } for ( itb=0;itb<ntb;itb++ ) { tp = tbl+itb; fprintf(fo,"%s%s%s",tp->aaa,tp->bbb,tp->ccc); } fclose( fo ); return 0; } csvファイルないようが以下であれば格納できるけど、すごく困ってます。 ******************** あいう,かきく,さしす たちつ,なにぬ,はひふ まみむ,やゆよ,らりる ********************

  • csvファイルを構造体に格納したいです

    ファイル内容 ******************** あいう,,さしす たちつ,なにぬ,はひふ まみむ,, あいう,win, ******************** #include <stdio.h> #include <string.h> #define MBF 256 struct tb{ char aaa[32]; char bbb[32]; char ccc[32]; }; int main(){ struct tb tbl[20]; struct tb *tp; int ntb,itb; FILE* fi; FILE* fo; char buff[MBF]; // 入力 fi = fopen("sample.csv","r"); // 検査省略 if( fi == NULL ){ printf( "%sファイルが開けません\n" ); return -1; } ntb = 0; while ( fgets(buff,MBF,fi ) != NULL ) { strcpy(tbl[ntb].aaa,strtok(buff,",")); strcpy(tbl[ntb].bbb,strtok(NULL,",")); strcpy(tbl[ntb].ccc,strtok(NULL,",")); ntb++; } fclose( fi ); // 出力 fo = fopen("csvo.csv","w"); if( fo == NULL ){ printf( "%sファイルが開けません\n" ); return -1; } for ( itb=0;itb<ntb;itb++ ) { tp = tbl+itb; fprintf(fo,"%s%s%s",tp->aaa,tp->bbb,tp->ccc); } fclose( fo ); return 0; } csvファイルないようが以下であれば格納できるけど、すごく困ってます。 ******************** あいう,かきく,さしす たちつ,なにぬ,はひふ まみむ,やゆよ,らりる ********************

  • いつもお世話になっております。http://oshiete.goo.n

    いつもお世話になっております。http://okwave.jp/qa/q5836517.htmlで質問させているものです。 皆さんのアドバイスを頂き、2分探索法で郵便番号から住所を検索するプログラムが出来たのですが、 住所から郵便番号を2分探索法で出すプログラムも同じ方法でやろうとしましたが、比較対象が漢字の為、大きい・小さいの判断できずに上手くプログラムが出来ていません。 csvファイルは読みデータをひとつに繋げてあいうえお順にソートしました プログラムを一部載せておきます(かなり省略済みですが…) #define NAME ken_all_address.csv int main(int argc,char *argv[]) { struct tb line; FILE *fp; char buff[SIZE], string_buff[SIZE]; char *address,*ret; int flag,linesu,linesu1,sum,count,up,up1,low,low1,center,center1; int i,j; long pos[FSIZE]; clock_t start,end; start = clock(); //引数処理 if((fq=fopen(NAME1,"r")) == NULL){ printf("ファイル%sが開けません\n",NAME1); return -1; } if((fp=fopen(NAME,"r")) == NULL){ printf("ファイル%sが開けません\n",NAME); return -1; } flag = 0; address = argv[1]; count=0; sum=0; if(atoi(address) == 0){ for(i=0; ;i++){ pos[i] = ftell(fq); ret=fgets( buff, sizeof(buff), fp ); if(ret==NULL){ break; } } linesu = i; //printf("%d",linesu); low=0; up=linesu-1; while(low <= up){ center=(up+low)/2; fseek(fq,pos[center-1],SEEK_SET); fgets( buff, sizeof(buff), fp ); strtok(buff,",\""); strtok(NULL,",\""); strcpy(line.now_num,strtok(NULL,",\"")); strtok(NULL,",\""); strtok(NULL,",\""); strtok(NULL,",\""); strcpy(line.kanji1,strtok(NULL,",\"")); strcpy(line.kanji2,strtok(NULL,",\"")); strcpy(line.kanji3,strtok(NULL,",\"")); strcpy(string_buff,line.kanji1); strcat(string_buff,line.kanji2); strcat(string_buff,line.kanji3); printf("%s %s %s\n",line.kanji1,line.kanji2,line.kanji3); if(strcmp(string_buff,address)==0){ printf("〒%s \n",line.now_num); flag=1; } if(strstr(string_buff,address) ==NULL){ low=center+1; } else{ up=center-1; } } } fclose(fp); if(flag==0 && atoi(argv[1]) == 0){ printf("「%s」に該当する郵便番号はありませんでした\n",address); } if(flag==0 && atoi(argv[1]) != 0){ printf("「%s」に該当する住所はありませんでした\n",address); } end = clock(); printf("引数=%s\n",address); printf("%.30f秒かかりました\n",(double)(end-start)/CLOCKS_PER_SEC); printf("fgetsの実行回数=%d回\n",sum); printf("比較回数=%d回\n",count); printf("\n"); return 0; }

  • コンパイルエラーの原因がわからず困っています。

    こんばんは。 どなたか以下のプログラム(test4.c)が何故コンパイル出来ないのか教えて頂けませんか。行数は見やすいように一時的につけさせて頂きました。 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 #include<unistd.h> 5 #include<errno.h> 6 #include<signal.h> 7 #include<sys/types.h> 8 9 10 11 12 13 int main(){ 14 FILE *fp,*fp2; 15 char str[1024]; 16 char *tok; 17 char buf[256]; 18 fp = fopen("file.txt","r"); 19 int i = 0; 20 fp2 = fopen("out.txt","a"); 21 22 while((str = fgets(str,1024,fp)) == EOF){ 23 24 while(1){ 25 // 前文を取得 26 tok = strtok(str, "("); 27 printf("%s\n",tok); 28 strcat(buf, tok); 29 30 // 中文を取得 31 tok = strtok(NULL, ")"); 32 if(tok == NULL)break; 33 tok = strtok(NULL, ")"); 34 if(tok == NULL)break; 35 36 *(tok + 1) = '\0'; 37 tok = strtok(NULL, "CEUFRSAP.");//フラグをトークンの材料にする 38 strcat(buf,tok); 39 40 // 後文を取得 41 tok = strtok(NULL, "("); 42 tok = strtok(NULL, ")"); 43 strcat(buf,"tcp "); 44 strcat(buf,tok); 45 break; 46 } 47 printf("%s\n",buf); 48 printf("%d行目です/n",i++); 49 fputs(buf,fp2); 50 } 51 52 printf("合計%d行です\n",i); 53 fclose(fp); 54 fclose(fp2); 55 return 0; 56 } 以下がコンパイルエラーの全文です。 test4.c: In function ‘main’: test4.c:22: error: incompatible types in assignment どんな些細な意見でも結構です。アドバイスをして頂けないでしょうか。どうぞよろしくお願いします。

  • C言語でファイルの内容を strtok関数 を使って数字と文字を分けて

    C言語でファイルの内容を strtok関数 を使って数字と文字を分けて配列に格納したいのですが、うまくできません。 どこが駄目なのかご指摘をお願いします! ファイル内容 20 田中 10 鈴木 #include <stdio.h> #include <string.h> #include <stdlib.h> int main(int argc,char *argv[]) { FILE *fp; char str[256]; char *tp; int i=0; int num[10]; char na[10]; fp=fopen(argv[1],"r"); while(fgets(str,sizeof str,fp)!=NULL); tp = strtok ( str, " " ); while(tp != NULL ) { num[i]=atoi(tp); tp = strtok( NULL," "); if ( tp != NULL ){ na[i]=*tp; } i++; } printf("%d\n%s",num[0],na[0]); printf("%d\n%s",num[1],na[1]); fclose(fp); return 0; }

  • Borland C CSVファイル読み込み

    CSVファイルを読み込み、読み込んだ値で計算を行うプログラムを作っています。 ・環境はWindows VISTA UltimateでBorland C++ Compiler 5.5  ・CSVファイルのデータの形式は 1,4532 4,2131 6,4301 . . ・データ数は決まっていて今のところ全部で12個 そして以下のようにCSVの読み込みプログラムを試しに組んだ所、実行時エラーがでました。 #include <stdio.h> #include <stdlib.h> #include <string.h> void main(void) { int AN[11][1]; int i=0,j=0,c=0; char buff[1024], *tp; FILE *fp; /*配列初期化*/ for(i=0;i<11;i++) { for(j=0;j<2;j++) { AN[i][j]=0; } } fp=fopen("test1.csv","r"); if(fp==NULL) { /* オープン失敗 */ printf("ファイルがオープンできません\n"); exit(1); /* 強制終了 */ } while( fgets(buff, 1024 , fp) != NULL ) { tp=strtok(buff , ","); if (tp !=NULL) {AN[i][j] = atoi(tp);} printf("%d\n",AN[i][j]); tp = strtok(NULL , ","); if (tp !=NULL) {AN[i][j+1] = atoi(tp);} printf("%d\n",AN[i][j+1]); i++; } fclose(fp); } 実行するとファイルクローズの後、問題が発生したためプログラムを終了しましたと出ます。"AN[i][j]=atoi(tp)"の配列部分を単純に変数にするとこのようなエラーは出ないのですが。 なぜエラーが出るのか、どなたかご教授願います。

  • C言語で、ファイルを読み込んで数字と名前に分けて配列に格納に関する質問

    C言語で、ファイルを読み込んで数字と名前に分けて配列に格納に関する質問です! ファイルを開いた後でエラーとなるのですが、何が足りないのでしょうか? ファイル内容 20 田中 10 鈴木 #include <stdio.h> #include <string.h> #include <stdlib.h> int main(int argc,char *argv[]) { FILE *fp; char str[256]; char *tp; int k,i=0; int num[10]; char na[10][20]; fp=fopen(argv[1],"r"); if(fp==NULL){ printf("ファイルを開けません\n"); return 1; }else{ printf("開けた\n"); } while(fgets(str,sizeof str,fp)!=NULL){ tp=strtok(str," "); num[i]=atoi(tp); tp=strtok(NULL," "); strcpy(na[i],tp); i++; } printf("%d\n%s\n",num[0],na[0]); printf("%d\n%s\n",num[1],na[1]); fclose(fp); return 0; }

  • CSVを用いた検索プログラム動かし方

    #pragma warning( disable: 4996 ) #include <stdio.h> #include <string.h> #include <fstream> using namespace std; typedef struct tagKOTOWAZA{ char japanese[50]; char english[50]; }KOTOWAZA; int main() { char buf[256]; KOTOWAZA c[200]; int i, count; /*ifstream strtok strcpy を使ってファイルを読み込む*/ //=====ここから===== ifstream fin("Book1.csv"); if(fin.is_open()){ //ファイル内容の表示とクローズ for(count=0;fin.getline(buf, sizeof(buf)), !fin.eof();count++){//読み込める間 //printf("%s",buf);デバッグ用 char *p; p = strtok(buf,","); if(p)strcpy(c[count].japanese,p); p = strtok(NULL,","); if(p)strcpy(c[count].english,p); } fin.close(); }else{ printf("ファイルのオープンに失敗しました。\n"); return 1; } //=====ここまで==== return 0; } ここからどうすればCSVファイルに書いた 漢字,English を検索できるのかがわかりません・・・ 言語はC++を使っていますvisualstudio2012を使っています。 どうすればいいのか全く分かりません。 よろしくお願いします。

専門家に質問してみよう