- ベストアンサー
ファイルへの格納について
たとえば、12桁の数値データが何行にもわたって続いているとします。以下のように 259643258756 459831485628 123586486746 ・ ・ ・ このようなデータの上4桁と下4桁だけを取り出してファイルに各々格納し、必要な際にそれを取り出して利用するようなプログラムを作りたいときはどのようにすれば良いのでしょうか。解答をお願いします
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは 解説を一切していなかったですね。 No.1のプログラムはご質問にあった12桁の数値が入ったファイル(プログラム内ではorigin.txtとさせて頂きました。本当のファイル名があれば、変更して頂いて結構です。)を読み込んで、最初の4桁のファイル(プログラム内ではhead.txt)と最後の4桁(正確には9文字目から12文字目まで。プログラム内ではtail.txt)を自動的に生成する為だけの物です。 origin.txtファイルを用意して、下記のプログラムを仮にsample.cで、コンパイルしてsample.exeになったとして、origin.txtと同じフォルダにコピーして、実行すると、head.txtとtail.txtを作ります。 ただそれだけです。 では、プログラム自体の解説ですが、 #include <stdio.h> これはC言語ではおきまりの文ですよね。stdio.hというヘッダファイルをインクルードしています。 main() 今回は、特にプログラムにパラメータ等を与えないので、これで良いでしょう。 問題があれば、 void main(void) として下さい。 FILE *fpr,*fph,*fpt ; 今回使うファイルはorigin.txtとhead.txtとtail.txtですので、3個分のファイルポインタを定義しています。 char r[256],h[5],t[5] ; 更に、ファイルの読み書き用のデータを格納する為の入れ物を定義しています。 fpr = fopen("origin.txt","rt"); origin.txtを読み込み専用のテキスト形式で開いています。 fph = fopen("head.txt","wt"); fpt = fopen("tail.txt","wt"); 同様に、head.txtとtail.txtを書き込み専用のテキスト形式で開いています。 "rt"がreadのrとtextのt "wt"がwriteのwとtextのt ですね。 while ( fgets(r,256,fpr) != NULL ){ ・・・ } このwhileループはorigin.txtのファイルの最後に鳴ったらループから抜けると記述しています。 また、origin.txtから1行を読み込んで、rというポインタが示す領域にデータを入れています。 h[0] = r[0] ; h[1] = r[1] ; h[2] = r[2] ; h[3] = r[3] ; h[4] = '\n' ; ここまでが、origin.txtで読み込んだ1行の1文字目から4文字目までと改行の\nをhの配列に入れています。 fputs(h,fph); hの内容をhead.txtに書き込んでいます。 同様に t[0] = r[8] ; t[1] = r[9] ; t[2] = r[10] ; t[3] = r[11] ; t[4] = '\n' ; 9文字目から12文字目までと、改行の\nをtの配列に入れています。 fputs(t,fpt); tの内容をtail.txtに書き込んでいます。 最後に fclose(fpr); fclose(fph); fclose(fpt); 開いたorigin.txt、head.txt、tail.txtを閉じています。
その他の回答 (1)
- arukamun
- ベストアンサー率35% (842/2394)
こんばんは テキスト形式のファイルですか。 適当に書いてみました。 #include <stdio.h> main() { FILE *fpr,*fph,*fpt ; char r[256],h[5],t[5] ; fpr = fopen("origin.txt","rt"); fph = fopen("head.txt","wt"); fpt = fopen("tail.txt","wt"); while ( fgets(r,256,fpr) != NULL ){ h[0] = r[0] ; h[1] = r[1] ; h[2] = r[2] ; h[3] = r[3] ; h[4] = '\n' ; fputs(h,fph); t[0] = r[8] ; t[1] = r[9] ; t[2] = r[10] ; t[3] = r[11] ; t[4] = '\n' ; fputs(t,fpt); } fclose(fpr); fclose(fph); fclose(fpt); }
お礼
解答ありがとうございました。データはテキスト形式です。ただ、プログラムでコマンドの意味とかが分からないもので、具体的にどう応用したらよいものか・・・・。 もし、お暇があれば簡単な解説をしていただけるとうれしいです