- ベストアンサー
C言語でテキストファイルのデータ処理
はじめまして。 僕はC言語に関して全くの初心者です。 どうぞよろしくお願いします。 例えば、 1,0,0,7,6 2,0,0,5,5 3,1,0,4,9 : : のようなテキストファイル、test.txtがある時、 1行目の4カラム目(7)と5カラム目(6)を、 それぞれの行について差し引くプログラム、 つまり全ての行について4カラム目は7を引き、 5カラム目は6を引くプログラムの事で、 この例では、 1,0,0,0,0 2,0,0,-2,-1 3,1,0,-3,-3 : : となるようなプログラムを書き、結果を出力したいのですが、よく分かりません。 ちなみにawkで書いて実行すると、 (プログラム名はtest.awkとする) BEGIN{ i=0; } { while(i<1){ v3 = $4; v4 = $5; i++; } print $1,$2,$3,($4 - v3),($5 - v4); } 実行するプログラム↓ awk -f test.awk test.txt という感じなのですが…。 これを上述の様に、C言語でプログラムを書いて、 実行するには、例えばどのようなプログラムを書けば いいのでしょうか? なにぶん初心者のため、分からない事だらけですが、 よろしくお願いしますm(__)m
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
ベタですが、こんな感じかと。 必要に応じて適当に修正して下さい。 ----------------------------------- #include <stdio.h> int main(int argc, char *argv[]){ FILE *fp; int v3, v4; int F[5]; int c; if(argc != 2){ fprintf(stderr,"usage:test.exe file\n"); return 1; } if(NULL==(fp=fopen(argv[argc-1],"r"))){ fprintf(stderr, "%s can't open!",argv[argc-1]); return 2 ; } v3=v4=0; while(feof(fp)==0){ c=fscanf(fp,"%d,%d,%d,%d,%d",&F[0],&F[1],&F[2],&F[3],&F[4]); if(c<=0) break; if(v3==0 && v4==0){ v3=F[3]; v4=F[4]; } printf("%d,%d,%d,%d,%d\n", F[0], F[1], F[2], F[3]-v3, F[4]-v4); } fclose(fp); return 0; }
その他の回答 (4)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
>ANo.1を見よ。この手順が忠実に実装されています。 ふえっ! >4. 最初の一回だけ4,5番目のカラム値を保持する が怪しいですね。 (i を使いたくなかっただけなんですが、重大な意図しない動作の場合が・・) AWKでしてるようにすればいいんですけど・・ 念のため
- nofutureforyou
- ベストアンサー率9% (25/277)
なんのためにそういうことがしたいのかがよくかりません。awk でできているのでそれでいいのでは? カラムというフォーマットのデータを読むということがしたいのでしょうか? 標準入力でいいのでしょうか、それともファイルをオープンしたいのでしょうか? 読み込んだデータに色々な処理をしたいのでしょうか? データを全部読み込むだけのメモリーがありますか? とりあえず、よくあるパターンで、標準入力から、fgets で一行読み込んで、 そこから sscanf でフォーマットのあるデータを読み込んで、それを表示するといったことからはじめてはどうでしょう。
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
> もしよろしければ、簡単なプログラム例を教えて頂けないでしょうか? ANo.1を見よ。この手順が忠実に実装されています。
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
1. ファイルを開ける 2. 一行読む。読めなかったらおしまい 3. カラムに分解する 4. 最初の一回だけ4,5番目のカラム値を保持する 5. 4.で保持した値を引く 6. プリントする 7. 2.に戻る これを忠実に実装してください。
お礼
ご回答ありがとうございますm(__)m 全体的な流れはなんとなくわかったのですが、 もしよろしければ、簡単なプログラム例を教えて頂けないでしょうか?
お礼
ご回答ありがとうございますm(__)m このプログラムを参考にさせて頂き、 やってみたいと思いますm(__)m