-1

各行に 512 ビットの 7000 エントリで構成される大きなテキスト ファイルがあり、ビット操作を実行できるように、各行を読み取って char 配列に格納したいと考えています。

推奨される効率的な方法はありますか?

4

2 に答える 2

1

ファイル全体をロードし、メモリ内のファイルへの各 512 ビット ブロックへのポインタを保持します。

ただし、より良い回答が必要な場合は、さらに情報を提供する必要があります。


char **load_file(const char *filename) {
   size_t i, j, file_size;
   char *file_ptr;
   char **entries;
   FILE *fd;

   fd = fopen(filename, "r");

   fseek(fd, 0, SEEK_END);
   file_size = ftell(fd);
   rewind(fd);

   file_ptr = malloc(sizeof(char) * file_size);
   fread(file_ptr, file_size, 1, fd);

   fclose(fd);

   /* 64 + 1 because newline is a character */
   entries = malloc(sizeof(char *) * file_size/(64 + 1));
   for (i = j = 0; j < file_size; i++, j += 64 + 1) {
      entries[i] = &file_ptr[j];
   }

   return entries;
} 
于 2013-08-12T15:50:10.830 に答える
0

独自の仮定またはコードを提供した場合、私はより良い答えを導くことができますが、ここにあなたの質問に対する一般的な答えがあります...


fgets(ドキュメントはこちら) を使用して各リーンのバイトを読み取り、ビット単位の演算を使用して個々のビットにアクセスできます。ファイルをプログラムにパイプする(またはファイル読み取りライブラリを使用して処理する)ことができるようにfgets、から読み取ることができることに注意してください。stdin

文字配列については、有限配列ではなく動的配列を使用することをお勧めします。有限の配列を持つように設定されている場合は、スタックが大きなファイルでオーバーランする可能性があるため、(スタックではなく) メモリ プールに格納します (コール スタックのサイズは、使用しているアーキテクチャによって異なります)。

于 2013-08-12T15:46:43.527 に答える