問題タブ [fread]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
1729 参照

php - 個々の行で fseek() fread() を使用するか、ファイル全体と substr を解析するために fread() を使用する方が良いですか?

これをより明確にするために、コード サンプルを示します。

メソッド 1 には約 40 個の fread() があります (おそらく 15 個の fseek()) とメソッド 2 には 1 個の fread() があります。合計バイト数 (すべてファイルの中央で比較的接近しています)。

では、どのコードのパフォーマンスが向上するのでしょうか? どのコードを使用するのがより理にかなっていますか? 簡単な説明をいただければ幸いです。

0 投票する
6 に答える
551 参照

c++ - 別のファイルのファイル名からファイルを作成する C++

C++ でいくつかの大きなファイルの並べ替えに取り組んでいます。各行に 1 つずつ、すべての入力ファイルの名前を含むテキスト ファイルがあります。ファイル名を一度に 1 つずつ読み取り、それらを配列に格納してから、それらの名前ごとにファイルを作成したいと思います。現在、文字配列を必要とする fopen と fread を使用しているため (速度を最適化しようとしています)、ファイル名は文字配列の配列に読み込まれます。ただし、これらの配列には事前に最大サイズを固定する必要があるため、ファイル名が最大サイズよりも小さい場合、残りはゴミでいっぱいになります。次に、その配列を fopen() でファイル名として使用しようとすると、文字列の末尾にゴミがあるため、ファイルが認識されません。どうすればこの問題を解決できますか? これが私のコードです:

また、fwrite() で書き出すバッファのサイズを調べるにはどうすればよいですか?

どうもありがとう、bsg

0 投票する
2 に答える
1723 参照

c++ - バッファーから可変長レコードを読み取る - 奇妙なメモリの問題

非常に大きなデータセットに I/O 集約型のクイックソート (C++ qsort) を実装しようとしています。速度のために、一度にデータのチャンクをバッファーに読み込み、qsort を使用してバッファー内で並べ替えたいと思います。(私は現在テキスト ファイルで作業していますが、すぐにバイナリに移行したいと考えています。)ただし、私のデータは可変長レコードで構成されており、ソートするにはレコードの長さを qsort に伝える必要があります。これを標準化する方法はありますか?私が考えることができた唯一のことはかなり複雑でした: 私のプログラムは現在、改行文字 (ascii の '10') に達するまでバッファーから読み取り、各文字を別の配列に転送します。改行(入力ファイルの区切り文字)を見つけると、そのレコード (レコード サイズが 30 に設定されている) のバッファーに残っているスペースの数を null 文字で埋めます。このようにして、qsort を実行するための固定サイズのレコードでいっぱいのバッファを作成する必要があります。

私のアプローチにはいくつかの問題があることを私は知っています.1つはそれが不器用であること、もう1つはレコードサイズがおそらく30を超える可能性があることですが、一般的にははるかに小さいことです。これを行うより良い方法はありますか?

同様に、私の現在のコードは機能しません。デバッグすると、あるバッファから別のバッファに文字を転送しているように見えますが、バッファを印刷しようとすると、最初のレコードしか含まれていません。

これが私のコードです:

どうもありがとう、bsg

0 投票する
11 に答える
19007 参照

c - Cでfreadを使用してstdinからバッファリングされた読み取り

`_IOFBF~ モードでstdin使用して から効率的に読み込もうとしています。setvbuf私はバッファリングが初めてです。私は実用的な例を探してます。

入力は 2 つの整数 ( nk) で始まります。入力の次のn行には、1 つの整数が含まれます。目的は、 で割り切れる整数の数を出力することkです。

問題は、 number が境界にある場合、バッファー buf23から読み取られることです。2354\n読み取りが必要な場合2354(読み取れない)、または何もない場合です。

この問題を解決するにはどうすればよいですか?


編集
解決済み (分析あり) .

完全な問題仕様の編集

0 投票する
3 に答える
401 参照

c - このコードが期待される出力を出力しないのはなぜですか?

これは、バグを見つけるための良い質問になる可能性があります。いいえ?少なくとも初心者には大丈夫です。

code>

Using the above code, I am trying to read from a file using redirection ./a.out < data. Contents of input file:

But I am not getting the expected output, rather some graphical characters are mixed in. What is wrong?


Hint: (Courtesy Alok)

  • sizeof('1') == sizeof(int)
  • sizeof("1") == sizeof(char)*2

So, use 1 instead :-)

Take a look at this post for buffered IO example using fread

0 投票する
5 に答える
4071 参照

c - 構造の読み書き [C]

重要な編集:

申し訳ありませんが、私は構造に大きな間違いを犯しました。char *name; 構造の外側にあることを意味し、構造の後にファイルに書き込まれます。このようにして、構造を読み取り、名前のサイズを調べてから、文字列を読み取ります。また、ヌル ターミネータが必要ない理由についても説明します。しかし、私はどこかで、私の実際の質問が答えられていると感じています。誰かが自分の回答を編集して、最適なものを選択できるようにしたい場合は、それをいただければ幸いです。

繰り返しますが、私が尋ねていた質問は、「構造体を読み取る場合、それが保持するデータも読み取っていますか、それとも他の方法でアクセスする必要がありますか」です。

混乱させて申し訳ありません

割り当てのために、私は (fread と fwrite を使用して) ディスクに構造を読み書きするプログラムを任されました。

コンセプトがつかめなくて困っています。この構造があるとしましょう:

ここで、次のデータを与えるとします。

次に、ファイル ポインタ fp を指定して fwrite... を使用します。

ここでファイルを閉じ、後で開いて構造を読み込みます。問題は次のとおりです。構造体を読み取るとき、格納されている変数も読み取っているのでしょうか。

次に、次のようなことができますか。

それとも、構造だけでなく何かを fread する必要がありますか、または何らかの方法でそれらを割り当てる必要がありますか? fread を次のように仮定します。

また、上記のように、現在の関数で構造を定義したと仮定します。

助けてくれてありがとう!

0 投票する
2 に答える
25320 参照

c - C の fread/fwrite 文字列

レコードを含むバイナリ ファイルがあります。ファイルの構造は次のとおりです。

構造 (下記参照) Name String Address String

問題の構造:

私はそのような名前を取得します:

構造、名前、アドレスの順に記述します (前述のとおり)。

ここで、fp はファイル ポインタです。

今、私はファイルを閉じます。ただし、ファイルから読み取ってこのデータを取得する場合は、構造体を読み取り、nameLength 変数を読み取り、名前が収まる十分なメモリを malloc し、名前を変数に読み込む必要があると思います。

そのようです:

ただし、これを試みると、有効なデータが得られません。例:

だから明らかに私は何か間違ったことをしています。誰か助けてくれませんか?

0 投票する
3 に答える
2614 参照

c - Freadバイナリファイルの動的サイズ文字列

私はこの割り当てに取り組んでいます。そこでは、「レコード」を読み込んでファイルに書き込み、後でそれらを読み取ったり見つけたりする必要があります。プログラムを実行するたびに、ユーザーは新しいレコードを書き込むか、古いレコードを読み取るか(名前または#のいずれかで)を決定できます。

ファイルはバイナリです。その定義は次のとおりです。

プログラムの動作方法では、構造、名前、アドレスの順に格納されます。名前とアドレスは動的に割り当てられるため、最初に構造を読み取って名前とアドレスのサイズを見つけ、それらにメモリを割り当ててから、そのメモリに読み込む必要があります。

デバッグの目的で、現在2つのプログラムがあります。私は自分のファイル書き込みプログラムとファイル読み取りを持っています。

私の実際の問題はこれです。私が書いたファイルを読むとき、私は構造を読み、電話番号を印刷してそれが機能することを確認し(これは正常に機能します)、次に名前を読みます(これでレコードを使用できるようになります)。適切な値も報告するnameLength)。ただし、Freadは使用可能な名前を返さず、空白を返します。

ファイルに名前を正しく書き込んでいないか、正しく読み取っていないという2つの問題があります。これが私がファイルに書き込む方法です:ここでfpはファイルポインタです。record.nameは適切な値であるため、record.nameLengthも適切な値です。また、ヌルターミネータを含む名前を書いています。(例:'Jack \ 0')

そして、ファイルを閉じます。これが私がファイルを読む方法です:

そこにいくつかのデバッグ機能があることに注意してください(名前の長さと数、どちらも正しい)。だから私はファイルが正しく開かれたことを知っています、そして私は名前の長さをうまく使うことができます。それでは、なぜ私の出力が空白、改行、またはそのようなものなのですか?(出力は名前だけです:その後は何もありません、そしてプログラムはうまく終了します)

助けてくれてありがとう。

0 投票する
1 に答える
1824 参照

php - PHP fopen 中に CSV ファイルのポンド記号が読み取られない

問題が発生しています。ポンド記号と一重引用符がファイルから次のように読み取られています。私のコードは次のとおりです。

この問題を解決する方法を知っている人はいますか。エンコーディングの問題は知っていますが、修正方法がわかりません。ファイルは CSV ファイルです。ありがとう