假设我有一个文本文件说: 此文件包含纯文本
现在,我想将此文本文件分成具有相同字符的'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);
}
}
答案 0 :(得分:1)
你可以这样做:
fseek
和ftell
)。然后回头看看getc
)并写入相应的文件(putc
)
sprintf(fname, "%d.txt", index)
构建名称,如“1.txt”fopen
打开文件并保留每个步骤中写入的FILE *current
话虽如此,你应该慢慢开始。首先制作一个程序,只需使用getc
+ putc
将一个文件复制到另一个文件中,然后按照自己的方式工作。
答案 1 :(得分:0)
你可能需要计算出总共有多少文本,可能是将整个文件“啜饮”到内存中。这适用于文件大小最大为兆字节,但不适用于千兆字节以及更高版本。
然后你需要知道将它分成多少部分(命令行参数处理?),以及要写入多少数据来写入每个部分。接下来是创建每个输出文件,将正确的数据段写入文件,然后关闭它。
假设文件有29个字节,您需要将其拆分为3个部分。你会创建2个部分,9个字节,一个11个,或2个10个,一个9个。如果是28个字节长,5个部分呢? (4 x 5字节+ 1 x 8字节?3 x 6字节+ 2 x 5字节?还是2 x 5字节+ 3 x 6字节?)