2012-04-05 13 views
0

私はwin32で古い学校のmmorpgをプログラミングしています(これは非常に古いマシンで動作することになっています)、ASCIIまたはUnicode(まれに)のファイルを読み込み、カウントしたいその中の行数。それらのマシンのメモリが非常に非常に少ないという事実のため、私はRAMに一度に4KB以上を保持することはできません。win32でファイルを読む

ありがとう

+2

あなたが唯一* 1ライン分の十分なストレージを持っている必要がありますされて*ファイル内にあります。あなたが行を数えればいいということさえありません。単にfgets()関数を使います。 NULLを返すまで呼び出してください。 '\ n'の最後に返された文字列をチェックし、行カウンタをインクリメントします。 –

+0

これはクライアントかサーバーですか?確かに、大規模なリソースがなくても "大規模なマルチプレイヤー"ゲームを作ることはできません。 – geoffspear

答えて

2

メモリバジェットのサイズの1/10の小さなチャンクでファイルを一度に読み込みます。各チャンクの行末を数えます。

あなたが直面する唯一の本当の問題は、1つのチャンクの終わりから次のチャンクの始まりまでにわたるcr + lfペアを処理する必要があることです。

脇に、確実に4KBではなく4MBを意味しますか?

+0

リターンキャリッジと改行以外のすべてを無視してファイルをピークするだけでも実行可能な場合もあります(行末規則に従います)。このようにするのは実際は非常にスピーディーであり、フットプリントはごくわずかです。 –

+0

@Mikeそれはまさに私が提案しているものです。 –

+0

メモリに約4KBしか格納できないと言ったときに一度に128KBを読み込むことに問題はありませんか?ただ疑問に思う。 –

0

ただ、ちょうど私が思う、次の...

type foo.txt|find /C /V "~`[email protected]#$%^&*()_+" 

それとも本当に少し違う何かを提案する...しばらく

find /C /V "" foo.txt