Как разделить текстовый файл на части в C? [закрыто
Вопрос
Предположим, у меня есть текстовый файл с написанием:Этот файл имеет простой текст
Теперь я хочу разделить этот текстовый файл на количество частей с равными символами. Предположим, что пользователь нужен три подразделения, затем 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
) Затем ищите в начале - Определите размер, который вам нужно записать в каждый файл (размер / n)
- Читать по одному персонажу за раз (используйте
getc
) и записать в соответствующий файл (putc
)- Использовать
sprintf(fname, "%d.txt", index)
Чтобы создать имена, такие как "1.txt" - Использовать
fopen
открыть файлы и сохранитьFILE *current
на что вы пишете на каждом шаге
- Использовать
При этом вы должны начать медленно. Сначала сделайте программу, которая просто копирует один файл в другой, используя getc
+ putc
И пройдите свой путь вверх.
Другие советы
Вам нужно будет выяснить, сколько текста в общей сложности, возможно, путем «удаления» всего файла в память. Это будет хорошо работать для размеров файлов до мегабайт по размеру, но не для гигабайт и за его пределами.
Затем вам нужно знать, сколько частей разделить его на (обработка аргументов командной строки?), И поэтому сколько данных написать для записи в каждую часть. За этим последует создание каждого из выходных файлов, написание правильного сегмента данных в файл и закрыть его.
Предположим, что файл имеет 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 байт?)