- ベストアンサー
C言語のテキストファイルの読込み
cortotbachの回答
- cortotbach
- ベストアンサー率44% (8/18)
おそらく、ご質問の要求をもう一度整理されたほうが良いのかもしれません。 テキストの読み込み処理で行単位で行う、2つの関数間で相互に読み込みを行う、whileとfscanfという使う関数を指定されているのが条件でありながら、リアルタイムという高速性を求めておられます。 まず、ご質問の内容で、main関数が終わってA関数という動作はリアルタイムというよりは同期的な動作です。おそらく”早さ”の意味でリアルタイムをお使いになっていると思われますが、それであれば、一度ファイルをメモリに全部取り込んでしまう(現代のPCならメモリはふんだんにあるでしょうし)、下の方の述べているようなテキストではなくバイナリファイルで扱うというなどの方法で対応するほうが良いのかもしれません。 回答ベタですが、本当に高速性を求めるならテキストファイルでscanfを二つの関数で順番に読むという条件を解体した方が良いかと思います。また下の方も述べていますが、ファイルのオープンもバッファがありますので、十分な速度は出ていると思います。この速度をより早くというのであれば、上記のようなメモリに取り込むなり、同期オブジェクトを使うなり方法があるのかなと思いました。 全く回答になってなくて申し訳ないです。 蛇足ですが、10行目の処理をscanfでというのであれば、\nの改行文字を10回カウントする以上に早い方法はないですよ。
関連するQ&A
- 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
- ベストアンサー
- C・C++・C#
- C言語での、テキストファイル読み込みについて
30行×30列の数字が記載されてテキストファイルがあり、 それをC言語で例えばA[ ][ ]といった配列に読み込みたいのですが、 どうすればよいでしょうか? fscanf関数を用いればできないことはないと思うのですが、 30個も書かなければならないのは冗長なので・・・。 なにかよい方法はありますでしょうか?
- ベストアンサー
- C・C++・C#
- C言語のバイナリモードでのfscanf関数の使い方について教えて下さい
C言語のバイナリモードでのfscanf関数の使い方について教えて下さい。 2*2のint型配列バイナリデータを読み込んで、要素一つ一つを出力したいのですが、 fscanfでの書式指定の仕方がよく分かりません。 fscanf(入力元,"???",&入力先)の???の部分はどう指定すればよいのでしょうか? 下記のようなプログラムを書いたのですが、fscanfでデータを読み込めず、 data=0という出力で無限ループに入ってしまいます。 C言語初心者なので、かなり初歩的な質問かと思いますが、 よろしくお願いします。 -------------------------------------- char *fi; int data; fi = argv[1]; /* 2x2のint型配列バイナリデータを指定 */ input = fopen(fi,"rb"); while(!feof(input)){ fscanf(input,"%d",&data); printf("data=%d\n",data); } ---------------------------------------
- ベストアンサー
- C・C++・C#
- c言語でのfscanfについて
例えば ------------------ ほげほげ1 ほげほげ2 1,2 2,4 3,8 4,16 ------------------ というデータファイルがあったとき3行目からのデータだけを抽出するにはc言語のfscanfでどのように書けばいいでしょうか? 簡単にでかまわないので、どなたか教えてください。
- ベストアンサー
- C・C++・C#
- C言語についてです。
C言語についてです。 次のようなテキストファイルがあるとします。 ------------------------------------- Sample.txt ------------------------------------- 項目一 項目二 項目三 1 2 1 2 1 3 3 3 1 ------------------------------------- 一行目が文字列、2行目以降が整数というファイルです。 このファイルを読み込み、1行目の文字列を表示し、2行目以降を読み込んでn行3列の配列に入れ更に表示したいのですが、どのように書けばいいのでしょうか? 宜しくお願いします。
- ベストアンサー
- C・C++・C#
- テキストファイルについて
ご教授お願い致します。 あるレコードを自動でテキストファイルへ書きこむ作業がありまして テキストファイルの保存先名の指定はできるのですが タイトルをテキスト行の一行目につけたいとの要望がありました。 そのレコードのみの書き込みのため一行目に何の題名かが 自動で表示できればいいとの要望でした。 よって、保存先名を指定の場所でファイル名を作成すると同時に 一行目に指定した題名をつけることが可能でしょうか? ぜひ、ご回答お願い致します。
- 締切済み
- その他([技術者向] コンピューター)
- テキストファイルを配列に
始めまして C言語にてテキストファイルの中身を読み込み一次元配列に代入するというシステムを作ろうとしているのですがわかりません テキストファイルの中身は 12 5312 72 7 444 53 7884 といった具合で100数行あり一行ごとに配列に入れたいです 勉強を始めたばっかりで本を見ても書いていなく困っています わかるかたご指導願えますか? よろしくお願いいたします
- 締切済み
- C・C++・C#
- 2つのファイルを比較するC言語プログラムについて
はじめまして、C言語プログラミングについて質問です。 2つのファイルの内容を比較するプログラムをC言語で作成する方法 について教えて頂けますでしょうか? 2つのファイルをそれぞれオープンした後、ファイルの先頭から1行ずつ読み込んで比較し、 違いがあればその行を画面表示するという動作をさせたいと考えて おります。
- ベストアンサー
- C・C++・C#
- テキストファイルについてのプログラム
初めまして、VC++2005を使っているプログラム初心者です。 windowsフォームアプリケーションというテンプレートを使ってプログラムを作成したいと考えているのですが、どのようにすればよいのかわからず質問しました。ご指導していただけると嬉しいです。 まず、test.txtというテキストファイルの中に以下の内容があります。 8:00 朝食 12:00 昼食 15:00 おやつ 19:00 夕食 というデータです。 このデータをボタンをクリックするとテキストファイルを1行ずつ読んで行き、15:00という文字が出たらテキストボックスに「おやつの時間」というものを表示する方法とまたそのテキストファイルの内容全体を別のテキストボックスに表示したいのですが、どのようにすればよいのでしょうか? fscanfやfopenなどを使うのですが、どうしてもうまくいかないのでよろしくお願いします。
- 締切済み
- C・C++・C#
お礼
丁寧にありがとうございます。 初心者すぎて自分の質問すらもうまくまとめきれずすみませんでした。 二つの関数を相互に読み込む方法を使わずに解決(?)する方法を 知人が教えてくれたのでプログラムはできました。 ありがとうございました。