C言語でファイルからデータを読み込み、そのデータを編集しファイルに出力する
というプログラムを作成しています。
ファイルデータはfgetsを使用し、読み込んでいます。
そこでお聞きしたいのですが現在、ファイル1行の最大サイズが不明のためfgetsで設定する
文字サイズをかなり大きくとってあります。
(とりあえず確認できた最大サイズが4000バイトだったので保険もかねて20000バイトを
設定しています)
やはり文字サイズを大きくすると性能等に影響があるのでしょうか?
また、ファイル1行の最大サイズが不明の場合、通常どのようにファイルを読み込むべき
なのでしょうか?
ご回答の方よろしくお願いします。
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
仕様を決めないと必ずぶちあたる問題です。
1行のサイズを仕様で4000Byteまで、とか決めないと、例えば破損したファイルとか間違えてバイナリファイルを指定したとかで改行がなかったりしたら、対応しようがないからです。
仕様を決められるのであれば、あとはエラー判定の仕方を考えれば良いだけですから。
それとファイルの末端行にもちゃんと改行が入るべきかどうかも考慮しておく必要があります。
fgetsで読めた範囲に改行ないからといって、続きがあるとは限りません(ファイルの最後に改行を入れていない可能性もある)から。
この手の処理をなんでも対応できるようにし、かつ性能面も踏まえると、fwriteなどでまとまったサイズをファイルから読み込み、メモリ上で1文字単位のチェックを行っていく必要が出てきます。
全ては仕様で左右されるかと思います。
No.3
- 回答日時:
サイズが大きくなれば
・領域を確保するための処理が多くなる
・仮想メモリ空間を使っているシステムの場合、スワッピングが発生することがある
ということで、遅くなる可能性はあります。
昨今のGBオーダーのメモリで20kB程度では、目に見える影響は無いでしょう。
fgetsは改行文字まで含めて読み込むことを利用して
読み込んだ文字列の最後が改行でなかったら、バッファを拡張、続きを読み込んで前回分に結合する
という方法があります。
No.2
- 回答日時:
>保険もかねて20000バイトを設定しています)
ならば20000バイトが仕様とすれば済むのでないでしょうか?
それ以上の行は仕様外、エラーです。
ファイルとして扱えるサイズを仕様としたければ、編集処理が1度に行を読み込めなくても処理出来るように作る必要があります。
そうなれば fgets を繰り返し呼び出せば済むと思います。
No.1
- 回答日時:
>また、ファイル1行の最大サイズが不明の場合、通常どのようにファイルを読み込むべきなのでしょうか?
簡単に思いつくのは、1文字ずつ読み込んで行バッファをrealloc()で確保拡張してく。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# pythonのファイルの並びでの読み込みとリストについて 4 2022/04/13 03:52
- Visual Basic(VBA) 【VBA】写真の縦横比を変えずに貼り付ける 5 2023/06/13 11:42
- UNIX・Linux VirtualBox ゲストOSにPC内蔵HDDのパーティションをマウントする方法は? 2 2023/05/06 22:52
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- その他(プログラミング・Web制作) Pythonで、データファイルと列名ファイルを1つのファイルにしたいです。 1 2023/07/27 20:29
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- PDF PDFに精通した方に質問。JPEGファイル群を一つのPDFファイルにするときの容量変化について 6 2023/07/23 19:06
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- デジタルカメラ 画像ファイルのサイズを理解する方法についてお教えください。 3 2022/09/18 12:54
- Visual Basic(VBA) VBAでの共有パスにつきまして 1 2023/03/04 17:24
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語初心者の質問失礼します。
-
ドラッグアンドドロップでファ...
-
iniファイルに追記がしたいです。
-
ASP .NETでファイル選択ダイア...
-
WAVファイル同士の結合が可...
-
csvファイルを開かずに文字を検...
-
ファイル名の先頭にアンダース...
-
Excelマクロでの再読込み方法
-
C言語のfopenについて教えてく...
-
複数ブックの統合について Exce...
-
fopenの"r+"モードで同時に読み...
-
htmlを置換する方法とjsp表示
-
複数のファイルからのデータの...
-
ファイルを開かずにカスタムド...
-
VBAにてEXCEL以外のファイル(テ...
-
Arduinoでのライブラリファイル...
-
大きいサイズのテキストファイ...
-
2つのCSVファイルの比較
-
アドレス帳WABファイルをサンダ...
-
ファイルクローズとメモリ使用...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語初心者の質問失礼します。
-
csvファイルを開かずに文字を検...
-
ファイル名の先頭にアンダース...
-
CSVファイルへの保存の際、デー...
-
ファイルを記録してあるセクタ...
-
テキストファイルの最終行を削...
-
SGファイルって何ですか?
-
ドラッグアンドドロップでファ...
-
分割コンパイルの#defineについて
-
VBに、Cのincludeのようなもの...
-
fopenできる上限の変更
-
グローバル変数のよくない使い...
-
ファイルの結合
-
大きいサイズのテキストファイ...
-
iniファイルに追記がしたいです。
-
バッチで118項目のCSVを処理し...
-
ハッシュの計算時間について
-
C言語のfopenについて教えてく...
-
Javascript で INI の読み書き
-
Excelマクロでの再読込み方法
おすすめ情報