Предмет: Информатика,
автор: grabovasofia139
Помогите, пожалуйста. Нужно написать программу в С.
Дан символьный файл. Получить новый файл состоящий из компонентов первого файла без участка от m-ой до n-ой компонентов
Ответы
Автор ответа:
0
#include
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; // конечная позиция (индекс)
removeSection(sourceFile, destinationFile, m, n);
// Закрываем файлы
fclose(sourceFile);
fclose(destinationFile);
return 0;
}
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; // конечная позиция (индекс)
removeSection(sourceFile, destinationFile, m, n);
// Закрываем файлы
fclose(sourceFile);
fclose(destinationFile);
return 0;
}
Похожие вопросы
Предмет: Другие предметы,
автор: badrakliza7
Предмет: Физика,
автор: asylai140509
Предмет: Физика,
автор: saparbekkovmiko
Предмет: Английский язык,
автор: sashazaikina11
Предмет: Алгебра,
автор: Vladick2233