-2

假设我有一个文本文件,上面写着: 这个文件有纯文本

现在,我想将此文本文件分成“n”个字符相同的部分。假设用户想要三个分区,那么应该创建 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

你可以这样做:

  • 查找文件的大小(使用fseekftell)。然后回到起点
  • 确定需要写入每个文件的大小(size / n)
  • 一次读取一个字符(使用getc)并写入相应的文件(putc
    • 用于sprintf(fname, "%d.txt", index)构建名称,如“1.txt”
    • 用于fopen打开文件并保留FILE *current您在每个步骤中写入的文件

话虽如此,你应该慢慢开始。getc首先制作一个程序,使用+将一个文件简单地复制到另一个文件中putc,然后逐步进行。

于 2012-02-18T18:29:04.457 回答
0

您将需要计算总共有多少文本,可能通过将整个文件“啜”入内存。这适用于最大为兆字节的文件,但不适用于千兆字节及以上。

然后您需要知道将其拆分为多少部分(命令行参数处理?),因此要写入每个部分要写入多少数据。随后将创建每个输出文件,将正确的数据段写入文件,然后关闭它。

假设文件有 29 个字节,你需要将它分成 3 个部分。您将创建 2 个 9 字节的部分和 1 个 11 字节的部分,还是创建 2 个 10 字节和 1 个 9 字节的部分。如果它是 28 个字节长和 5 个部分怎么办?(4 x 5 字节 + 1 x 8 字节?3 x 6 字节 + 2 x 5 字节?还是 2 x 5 字节 + 3 x 6 字节?)

于 2012-02-18T18:33:35.897 回答