Пример 1. Дан текстовый файл, фразы в котором отделены друг от друга точками, а слова – пробелами и знаками препинания. Каждая фраза располагается не более, чем на одной строке. Удалить из этого файла все фразы, содержащие цифры.
#include#include int main (void) { char str[100], c; int i, n; FILE *fin, *fout; fin = fopen("text.txt", "rt"); /* исходный файл */ fout = fopen("rezt.txt", "wt"); /*новый файл для сохранения результата */ if(!fin) /* если не открылся исходный файл */ { /* сообщаем об ошибке */ printf("Can not open text file\n"); system (“pause”); return 0; /* прерываем программу */ } if (!fout) /*если не удалось создать новый файл */ { /* сообщаем об ошибке */ printf("Can not create text file\n"); system (“pause”); return 0; /* прерываем программу */ } printf("\n\nIn file: \n"); while(!feof(fin)) /* пока не конец исходного файла */ { i = 0; n = 0; do { fscanf(fin, "%c", &c); /* читаем один символ */ if(c!='\n'&&!(c==' ' && i==0)) { /* если это не символ конца строки и не начальный пробел */ str[i] = c; /* присоединяем его к фразе */ i++; } if (c>='0'&&c<='9') /* если это цифра */ n++; /* устанавливаем флаг */ } while(c!='.'&&!feof(fin)); /* пока не конец фразы и не конец файла*/ str[i] = '\0'; /* завершаем фразу */ if(!n) /* если флаг не установлен (цифр не было) */ fprintf(fout, "%s\n", str); /* запись фразы в новый файл */ } fclose(fin); /* закрываем файлы */ fclose(fout); return 0; }
Пример 2. В текстовом файле записаны целые числа. Подсчитать, сколько чисел содержится в каждой строке.
#includemain() { FILE *f; int x,k=0; char c; f=fopen("int.txt","r"); if (!f) /* если не открылся исходный файл */ { /* сообщаем об ошибке */ printf("Can not open text file\n"); system ("pause"); return 0; /* прерываем программу */ } while (!feof(f)) /* пока не конец файла */ { fscanf(f,"%d",&x); /* читаем число */ k++; /* увеличиваем счетчик */ c=fgetc(f); /* читаем символ – разделитель чисел */ if (c=='\n'||c==EOF) /* если достигнут конец строки или конец файла */ { printf("%d ",k); /* выводим значение счетчика на экран */ k=0; /* обнуляем счетчик для следующей строки */ } } fclose(f); return 0; }
Пример 3. Компоненты бинарного файла – целые числа. Записать в этот файл вместо отрицательных чисел их квадрат.
#include#include #include void Gen_press(void); /* функция создания бинарного файла, содержащего целые числа */ void Pow_file(void); /* замена отрицательных значений в файле их квадратами */ void Out_file(void); /* вывод содержимого бинарного файла на экран */ int main(void) { int key = 0; srand(time(0)); while(key!=52) { system("CLS"); printf("Menu:\n\t1 - Create file gen press \ \n\t2 - Output file\n\t3 - Change file \ \n\t4 - Exit\n"); key = getchar(); if (key==49) Gen_press(); if (key==50) Out_file(); if (key==51) Pow_file(); } return 0; } void Gen_press(void) { /* заполнение файла с помощью генератора случайных чисел */ int k = 0, n = 0; FILE *fin; fin = fopen("datfile.dat", "wb"); if(!fin) { printf("Can not create binary file\n"); system("pause"); exit(0); } k = rand()%100+1; /* случайное количество чисел */ while(k) { n = rand()%101 - 50; /* случайное число от -50 до 50 */ fwrite(&n, sizeof(n), 1, fin); /* запись числа */ k--; } fclose(fin); printf("\n\nFile create\nPress any key...\n"); system("pause"); } void Out_file(void) {/* вывод содержимого файла на экран */ int n = 0; FILE *fin; fin = fopen("datfile.dat", "rb"); if(!fin) { printf("Can not open binary file\n"); system("pause"); exit(0); } printf("\n\nIn file: \n"); while(fread(&n, sizeof(n), 1, fin)) /* читаем из файла числа, пока есть, что читать */ { printf("%5d", n); /* и выводим на экран */ } fclose(fin); printf("\nPress any key...\n"); system("pause"); } void Pow_file(void) { /* изменение содержимого файла */ int n = 0; long k; FILE *fin; fin = fopen("datfile.dat", "r+b"); if(!fin) { printf("Can not open binary file\n"); system("pause"); exit(0); } rewind(fin); while(fread(&n, sizeof(n), 1, fin)) /* читаем из файла числа, пока есть, что читать */ { if (n<0) /*если число отрицательное */ { n*=n; /* возводим его в квадрат */ fseek(fin, ftell(fin)-sizeof(n), SEEK_SET); /* возврат к началу блока, содержащего это число */ fwrite(&n, sizeof(n), 1, fin); /* запись измененного значения */ fseek(fin, ftell(fin), SEEK_SET); /* повторно используем fseek() для перехода от записи к чтению, положение указателя текущей позиции не меняется */ } } fclose(fin); printf("\n\nFile change!\nPress any key...\n"); system("pause");
Пример 4. Дан файл, содержащий сведения о клиентах одного кредитора. Структура записи: ФИО, номер телефона, возраст, сумма. Получить сведения о самом старом клиенте, задолжавшем более указанной суммы.
#include <stdio.h> main() { FILE *f; int x,k=0; char c; f=fopen("int.txt","r"); if (!f) /* если не открылся исходный файл */ { /* сообщаем об ошибке */ printf("Can not open text file\n"); system ("pause"); return 0; /* прерываем программу */ } while (!feof(f)) /* пока не конец файла */ { fscanf(f,"%d",&x); /* читаем число */ k++; /* увеличиваем счетчик */ c=fgetc(f); /* читаем символ – разделитель чисел */ if (c=='\n'||c==EOF) /* если достигнут конец строки или конец файла */ { printf("%d ",k); /* выводим значение счетчика на экран */ k=0; /* обнуляем счетчик для следующей строки */ } } fclose(f); return 0; }