カンマ区切りで一行に10個のデータ(data[0]からdata[9]とする)が入っているtxtファイルがあるとします。data[]はlong型とします。
ファイルを"r+"モードで読み込み、各行で、data[0]の値によって異なる計算を行い、その結果をdata[9]の値に加えたいとおもいます。
恐らく非常に基本的なことで、申し訳ないのですが、教えていただけると助かります。。
FILE *fp;
fp=fopen(fp,"test.txt","r+");
for(int i=1;i<=rowcount;i++){
//ここでdata[0]からdata[9]を読み込んだとする
//
data[9]+=data[0]*2;//こういう処理をする
/*そして、新しいdata[9]の値をもとのdata[9]の値と置き換えたい*/
}
fclose(fp);
No.1
- 回答日時:
がると申します。
まずは基礎概論から。
本を読むときに途中までとか読むと、しおりを挟みますよね?
これと同じように、ファイルをopenすると、「ファイルポインタ」という名前のしおりが作成されます。
open直後は先頭に。そうしてread処理をすると「読んだところまで」ファイルポインタが進みます。
一つは「一度closeしてopenしなおす」とファイルポインタは先頭に戻るのですが。
もう一つ、直接ファイルポインタを操作する関数があります。
fopenを使われているのでしたら、fseekというのがそれにあたります。
Googleあたりでfseekで検索すれば色々と出てくるかと思います。
ちなみに、今回は「ファイルサイズが必ず同じか増えるか」なので不要なのですが、もしファイルサイズが減る可能性がある場合はtruncate(ftruncate)という関数を併用して、サイズを切り詰める必要があります。
以上、簡単ですが。
参考URL:http://www9.plala.or.jp/sgwr-t/lib/fseek.html,ht …
No.2
- 回答日時:
ご質問のように計算途中で、ファイル長が変化するような処理を"r+"で開いて1ファイルだけで処理するのは適当ではありません。
素直にtmpファイルを開いて計算結果を順次別ファイルに書き込み、全ての計算が終わってから、元ファイルを消して、tmpファイルをrenameすべきです。
とりあえずそのようにコーディングしたのですが、将来的に速度低下の原因にならないか、と危惧しまして、"r+"ではできないものか、という素人考えでした。
ありがとうございました。
No.3ベストアンサー
- 回答日時:
> 将来的に速度低下の原因にならないか、と危惧しまして、
text fileを使う限り基本的にその心配は無用です。
固定長にして、"r+"を使う手もありますが、高水準file I/Oにおいてはバッファリングの問題があり、出力入力の切替時はfflush(3)する必要があります。これによってバッファリングは無効となります。
これに対し、2個の入力用、出力用ファイルを開いた場合は、両方ともバッファリングが有効に作用するため、かえってI/Oに要する時間は短くなります。
速度が絶対的な場合、データーにtextを使うこと自体を見直すべきです。入出力変換は「高価」な処理です。
binary fileで、固定長の低水準I/Oを使ったプログラミングとなります。可読性も、データーの保守性も低下しますので、そこまでするかどうかは十分考慮すべきです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# pythonのファイルの並びでの読み込みとリストについて 4 2022/04/13 03:52
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- その他(プログラミング・Web制作) pythonでDBのカラム名で取得したオブジェクトの値を表示したい 1 2022/05/13 03:41
- その他(プログラミング・Web制作) Python - Excel で Webからデータを連続取得したいのですが エラーが出ます 1 2023/07/06 20:08
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- その他(プログラミング・Web制作) データ解析ソフトRでのファイル入力read.csvがエラーになります 7 2022/03/27 22:11
- Java 動かなくなったのでJavaソースを手直しお願いします。 2 2022/04/30 05:35
- JavaScript 【jquery】EasyUIのSubGridにMySQLのテーブルデータを表示&編集にしたい 5 2022/05/02 13:10
- その他(Microsoft Office) Excel 2列分のDATAの並べ替え 1 2023/01/01 17:12
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語初心者の質問失礼します。
-
SGファイルって何ですか?
-
csvファイルを開かずに文字を検...
-
fopenできる上限の変更
-
テキストファイルの最終行を削...
-
Javascript で INI の読み書き
-
大きいサイズのテキストファイ...
-
分割コンパイルの#defineについて
-
ファイルの結合
-
ftp先のファイルの存在を確認す...
-
ExcelVBA 定数宣言を外部ファイ...
-
Wordファイルの結合
-
C言語のfopenについて教えてく...
-
VB6でのファイル作成方法
-
「VBScript」ADODB.Streamにお...
-
アプリケーション終了時例外エ...
-
バッチで118項目のCSVを処理し...
-
VBに、Cのincludeのようなもの...
-
iniファイルをexeファイルと同...
-
VBAにてEXCEL以外のファイル(テ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語初心者の質問失礼します。
-
csvファイルを開かずに文字を検...
-
ファイル名の先頭にアンダース...
-
CSVファイルへの保存の際、デー...
-
ファイルを記録してあるセクタ...
-
テキストファイルの最終行を削...
-
SGファイルって何ですか?
-
ドラッグアンドドロップでファ...
-
分割コンパイルの#defineについて
-
VBに、Cのincludeのようなもの...
-
fopenできる上限の変更
-
グローバル変数のよくない使い...
-
ファイルの結合
-
大きいサイズのテキストファイ...
-
iniファイルに追記がしたいです。
-
バッチで118項目のCSVを処理し...
-
ハッシュの計算時間について
-
C言語のfopenについて教えてく...
-
Javascript で INI の読み書き
-
Excelマクロでの再読込み方法
おすすめ情報