. Нужно написать программу в С. Дан символьный файл. Получить новый файл состоящий из компонентов первого файла без участка от m-ой до n-ой компонентов
void removeSection(FILE *sourceFile, FILE *destinationFile, int m, int n) { // Получаем длину файла fseek(sourceFile, 0, SEEK_END); long fileSize = ftell(sourceFile); rewind(sourceFile);
// Проверяем корректность значений m и n if (m < 0 || n >= fileSize || m > n) { printf("Некорректные значения m и n\n"); return; }
// Создаем буфер для чтения и записи данных char buffer[1024]; long bytesRead = 0; long bytesToSkip = n - m + 1;
// Пропускаем участок между m и n while (bytesRead < fileSize) { if (bytesRead < m || bytesRead > n) { int bytesToRead = sizeof(buffer); if (bytesToRead > fileSize - bytesRead) { bytesToRead = fileSize - bytesRead; } int bytes = fread(buffer, sizeof(char), bytesToRead, sourceFile); if (bytes > 0) { fwrite(buffer, sizeof(char), bytes, destinationFile); bytesRead += bytes; } else { break; } } else { fseek(sourceFile, bytesToSkip, SEEK_CUR); bytesRead += bytesToSkip; } }
printf("Участок успешно удален из файла.\n"); }
int main() { // Открываем исходный файл FILE *sourceFile = fopen("input.txt", "r"); if (sourceFile == NULL) { printf("Не удалось открыть исходный файл.\n"); return 1; }
// Открываем новый файл для записи FILE *destinationFile = fopen("output.txt", "w"); if (destinationFile == NULL) { printf("Не удалось создать новый файл.\n"); return 1; }
int m = 2; // начальная позиция (индекс) int n = 5; // конечная позиция (индекс)