Я создал код для разбиения текстовых файлов, когда он находит слово «NEW DAY», а затем сохранит файл с определенным именем.Разделить текстовый файл на C и дать ему имя
Во-первых, я использовал File_Part1, File_Part2 и т. Д. Однако, я хочу использовать первые 15 символов второй строки файла, который я читаю, как имя сохраненного файла.
Например, вторая строка пишется: ТАМ 2000-03-07T14: 53 ... я хочу использовать только ТАМ 2000-03-07
Проблема заключается в том, что функция Sprintf хорошо работал для «% d», «% c», но не работает для «% s», и у меня нет идеи, почему.
Я пытался напечатать переменную непосредственно перед тем, чтобы увидеть, что Sprintf должен получать и получает именно то, что я хочу ...
Вот код:
int TAM_BUFFER = 75;
int filecounter=1, linecounter=1;
char fileoutputname[16];
int main(int argc, char *argv[]){
char buffer[TAM_BUFFER];
char buffer2[15];
FILE *arquivo = fopen("Entrada.txt", "r");
FILE *saida;
sprintf(fileoutputname, "file_part%d.txt", filecounter);
saida = fopen(fileoutputname, "w");
if(arquivo != NULL){
while(fgets(buffer, TAM_BUFFER, arquivo)){
if(linecounter==2){
strncpy(buffer2,buffer,14);
}
if (strncmp(buffer,"NEWDAY",strlen("NEWDAY")) == 0){
fclose(saida);
linecounter = 1;
filecounter++;
printf("%s", buffer2);
sprintf(fileoutputname,"%s", buffer2);
saida = fopen(fileoutputname, "w");
if (!saida)
return 1;
}
fprintf(saida,"%s\n", buffer);
linecounter++;
}
}
fclose(saida);
return 0;
}
Добавить 'PError();' 'когда saida' является' NULL'. Это может показать сообщение об ошибке. – jdarthenay
Вы также должны 'fclose (arquivo)' в конце вашего 'main()'. (Это не решит вашу проблему, но вы всегда должны закрывать файлы). – jdarthenay
Привет @jdarthenay, спасибо за совет, я действительно забыл закрыть (arquivo). О perror(), ну, он сказал «Нет ошибки». поэтому я думаю, что все в порядке. –