カンマ区切りで一行に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.3ベストアンサー
- 回答日時:
> 将来的に速度低下の原因にならないか、と危惧しまして、
text fileを使う限り基本的にその心配は無用です。
固定長にして、"r+"を使う手もありますが、高水準file I/Oにおいてはバッファリングの問題があり、出力入力の切替時はfflush(3)する必要があります。これによってバッファリングは無効となります。
これに対し、2個の入力用、出力用ファイルを開いた場合は、両方ともバッファリングが有効に作用するため、かえってI/Oに要する時間は短くなります。
速度が絶対的な場合、データーにtextを使うこと自体を見直すべきです。入出力変換は「高価」な処理です。
binary fileで、固定長の低水準I/Oを使ったプログラミングとなります。可読性も、データーの保守性も低下しますので、そこまでするかどうかは十分考慮すべきです。
No.2
- 回答日時:
ご質問のように計算途中で、ファイル長が変化するような処理を"r+"で開いて1ファイルだけで処理するのは適当ではありません。
素直にtmpファイルを開いて計算結果を順次別ファイルに書き込み、全ての計算が終わってから、元ファイルを消して、tmpファイルをrenameすべきです。
とりあえずそのようにコーディングしたのですが、将来的に速度低下の原因にならないか、と危惧しまして、"r+"ではできないものか、という素人考えでした。
ありがとうございました。
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 …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
好きな人を振り向かせるためにしたこと
大好きな人と会話のきっかけを少しでも作りたい、意識してもらいたい…! 振り向かせるためにどんなことをしたことがありますか?
-
歳とったな〜〜と思ったことは?
歳とったな〜〜〜、老いたな〜〜と思った具体的な瞬間はありますか?
-
みんなの【マイ・ベスト積読2024】を教えてください。
積読、ついついしちゃいませんか?そこでみなさんの 「2024年に買ったベスト積読」を聞きたいです。
-
AIツールの活用方法を教えて
みなさんは普段どのような場面でAIツール(ChatGPTなど)を活用していますか?
-
「これいらなくない?」という慣習、教えてください
現代になって省略されてきたとはいえ、必要性のない慣習や風習、ありませんか?
-
ファイル読み書き方法について(r+)
C言語・C++・C#
-
Enterキーを押されたら次の処理に移るという事をしたい。
C言語・C++・C#
-
C言語のfopenについて教えてください。
C言語・C++・C#
-
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・【大喜利】【投稿~1/31】『寿司』がテーマの本のタイトル
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・【大喜利】【投稿~1/20】 追い込まれた犯人が咄嗟に言った一言とは?
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語初心者の質問失礼します。
-
バッチで118項目のCSVを処理し...
-
ファイル名の先頭にアンダース...
-
fopenの"r+"モードで同時に読み...
-
csvファイルを開かずに文字を検...
-
CSVファイルへの保存の際、デー...
-
dataファイルをxtxファイルにす...
-
Excelマクロでの再読込み方法
-
リエントランスな関数
-
ExcelVBA 定数宣言を外部ファイ...
-
C言語のfopenについて教えてく...
-
OpenDialog1->FileNameについて
-
fprintfで文字化け
-
VB.NETでファイル操作
-
ファイル読み書き方法について...
-
ファイルの結合
-
ドラッグアンドドロップでファ...
-
SGファイルって何ですか?
-
VB.NETによるプロセス間通信
-
XMLファイルの表示について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語初心者の質問失礼します。
-
csvファイルを開かずに文字を検...
-
ファイル名の先頭にアンダース...
-
大きいサイズのテキストファイ...
-
テキストファイルの最終行を削...
-
グローバル変数のよくない使い...
-
マウスポインタの変更
-
バッチで118項目のCSVを処理し...
-
CSVファイルへの保存の際、デー...
-
VBに、Cのincludeのようなもの...
-
ドラッグアンドドロップでファ...
-
C言語のfopenについて教えてく...
-
dataファイルをxtxファイルにす...
-
RPGでファイル名(もしくはレコ...
-
ASP .NETでファイル選択ダイア...
-
ダイアログボックスで複数フォ...
-
SGファイルって何ですか?
-
同じ名前のファイルを作った場...
-
ファイルの結合
-
Excelマクロでの再読込み方法
おすすめ情報