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言語初心者の質問失礼します。
-
csvファイルを開かずに文字を検...
-
ドラッグアンドドロップでファ...
-
バッチで118項目のCSVを処理し...
-
テキストファイルの最終行を削...
-
大きいサイズのテキストファイ...
-
ファイル名の先頭にアンダース...
-
fopenできる上限の変更
-
ダイアログボックスで複数フォ...
-
グローバル変数のよくない使い...
-
VB.NETでファイル操作
-
【C#】リソースファイルの埋め...
-
WAVファイル同士の結合が可...
-
VB6でのファイル作成方法
-
XMLファイルの表示について
-
プログラムで文字をBMPファイル...
-
【C&C++】指定行のみファイル書...
-
BI書、FD書 とは
-
Javascript で INI の読み書き
-
Flash AS3.0でPSD読込みは可能...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語初心者の質問失礼します。
-
csvファイルを開かずに文字を検...
-
ファイル名の先頭にアンダース...
-
バッチで118項目のCSVを処理し...
-
テキストファイルの最終行を削...
-
CSVファイルへの保存の際、デー...
-
SGファイルって何ですか?
-
大きいサイズのテキストファイ...
-
ドラッグアンドドロップでファ...
-
分割コンパイルの#defineについて
-
グローバル変数のよくない使い...
-
iniファイルに追記がしたいです。
-
Excelマクロでの再読込み方法
-
C言語のfopenについて教えてく...
-
ハッシュの計算時間について
-
VBAにてEXCEL以外のファイル(テ...
-
Javascript で INI の読み書き
-
同じ名前のファイルを作った場...
-
ASP .NETでファイル選択ダイア...
-
VBに、Cのincludeのようなもの...
おすすめ情報