テキストファイルをCのパーツに分割するにはどうすればよいですか? [閉まっている
質問
次のようなテキストファイルがあるとしますこのファイルには単純なテキストがあります
次に、このテキストファイルを等しい文字を持つ「n」パーツの数に分割したいと思います。ユーザーが3つのディビジョンを必要としていると仮定し、1.TXT、2.TXT、3.TXTを作成する必要があり、それぞれ約8文字で作成する必要があります。
(このプログラムの次の部分は、これらのファイルを元の状態に戻すことですが、この最初の部分で助けを得ることができれば、自分でそれを行うことができると確信しています)。
この問題で私を導くことができますか?
使用される言語はCです。
void main(int argc, char** argv)
{
int iChunkNo=0;
char cFileName[30];
iChunkNo = atoi(argv[2]);
strcpy(cFileName, argv[1]);
printf("The file will be divided into %d chunks \n", iChunkNo);
FILE* file_read_pointer;
file_read_pointer = fopen(cFileName, "r");
int iCount=0;
char ch;
while (1)
{
ch = fgetc(file_read_pointer);
if (ch == EOF)
break;
++iCount;
}
printf("The number of characters in the file is: %d \n", iCount);
int iCharPerFile = 0;
iCharPerFile = iCount/iChunkNo;
printf("The number of characters per chunk file will be: %d \n", iCharPerFile);
FILE* file_write_pointer;
int j=1;
for(j; j<=iChunkNo; j++)
{
char num[5] = {j};
char ext[4] = {"txt"};
char name[15];
sprintf(name, "%d.%s", j, ext);
FILE* file_write_pointer;
file_write_pointer = fopen(name, "w");
}
int i=0;
for(i; i<iCharPerFile; i++)
{
char temp;
temp = fgetc(file_read_pointer);
//fputc(temp, file_write_pointer);
fprintf(file_write_pointer, "%c", temp);
}
}
解決
あなたはこのようなことをすることができます:
- ファイルのサイズを見つけます(使用してください
fseek
とftell
)。その後、最初に戻ります - 各ファイルに書き込む必要があるサイズを決定します(size / n)
- 一度に1つの文字を読んでください(使用してください
getc
)そして、対応するファイルに書き込みます(putc
)- 使用する
sprintf(fname, "%d.txt", index)
「1.txt」のような名前を作成するには - 使用する
fopen
ファイルを開いて保持するにはFILE *current
各ステップで書く
- 使用する
そうは言っても、あなたはゆっくりと始めるべきです。最初に、1つのファイルを別のファイルにコピーするだけで使用して作成するプログラムを作成します getc
+ putc
そして、あなたの道を進んでください。
他のヒント
おそらくファイル全体をメモリに「丸くする」ことにより、合計でどれだけのテキストがあるかを計算する必要があります。これは、サイズが最大メガバイトのファイルサイズでは正常に機能しますが、ギガバイト以上では機能しません。
次に、それを分割するパーツの数(コマンドライン引数処理?)を知る必要があります。これに続いて、各出力ファイルを作成し、データの適切なセグメントをファイルに書き込み、閉じることができます。
ファイルに29バイトがあり、3つの部分に分割する必要があるとします。 9バイトの2つのパーツと11のパート、1つは10で、1つは10で、1つは9で作成しますか? (4 x 5バイト + 1 x 8バイト?3 x 6バイト + 2 x 5バイト?または、2 x 5バイト + 3 x 6バイトですか?)