Как разделить текстовый файл на части в C? [закрыто

StackOverflow https://stackoverflow.com/questions/9343879

  •  27-10-2019
  •  | 
  •  

Вопрос

Предположим, у меня есть текстовый файл с написанием:Этот файл имеет простой текст

Теперь я хочу разделить этот текстовый файл на количество частей с равными символами. Предположим, что пользователь нужен три подразделения, затем 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 байт?)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top