-2

次のようなテキスト ファイルがあるとします。 このファイルにはプレーン テキストが含まれています。

ここで、このテキスト ファイルを、文字が等しい「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);
}
}
4

2 に答える 2

1

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

  • ファイルのサイズを確認します (fseekおよびを使用ftell)。その後、最初に戻る
  • 各ファイルに書き込む必要があるサイズを決定します (サイズ / n)
  • 一度に 1 文字を読み取り ( を使用getc)、対応するファイルに書き込みます ( putc)
    • sprintf(fname, "%d.txt", index)「1.txt」のような名前を作成するために使用します
    • fopenファイルを開きFILE *current、各ステップで書き込み先を保持するために使用します

そうは言っても、ゆっくり始めるべきです。getc最初に、 +を使用してあるファイルを別のファイルに単純にコピーするプログラムを作成し、putc上に向かって作業します。

于 2012-02-18T18:29:04.457 に答える
0

おそらくファイル全体をメモリに「丸呑み」することによって、合計でどれだけのテキストがあるかを計算する必要があります。これは、最大メガバイトサイズのファイルサイズでは正常に機能しますが、ギガバイト以上では機能しません。

次に、それを分割する部分の数(コマンドライン引数処理?)、したがって各部分に書き込むために書き込むデータの量を知る必要があります。続いて、各出力ファイルを作成し、データの適切なセグメントをファイルに書き込んで、ファイルを閉じます。

ファイルに29バイトがあり、3つの部分に分割する必要があるとします。9バイトの2つのパーツと11のパーツ、または10の2つのパーツと9のパーツを作成しますか?28バイトの長さと5つのパーツがある場合はどうでしょうか。(4x5バイト+1x 8バイト?3x6バイト+2x 5バイト?それとも2x5バイト+3x 6バイトですか?)

于 2012-02-18T18:33:35.897 に答える