Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Основные методы обработки текстовых файлов






Файловые функции ввода/вывода fprintf() и fscanf() работают аналогично функциям printf() и scanf(), но имеют дополнительный аргумент, являющийся указателем на файловый поток.

Пример 7.1. Написать программу, которая сжимает содержимое файла, записывая в выходной файл каждый пятый символ из входного файла.

#include < stdio.h>

#include < conio.h>

#include < stdlib.h>

#include < string.h>

 

void main(int argc, char *argv[])

{ FILE *f_in, *f_out;

int ch;

char *name; // имя входного файла

int count = 0; // счетчик элементов

if (argc< 2) // в командной строке нет имени

{ printf(" Введите имя входного файла");

gets(name);

}

else name = argv[1]; // взять имя из командной строки

if ((f_in = fopen(name, " r"))! = NULL)

{ strcat(name, ".out"); // добавляет расширение.out

// к имени файла

f_out = fopen(name, " w"); // открывает файл для записи

while((ch = fgetc(f_in))! = EOF)

if (count++ % 5 == 0)

fputc(ch, f_out); // выводит каждый третий символ

fclose(f_in);

fclose(f_out);

}

else printf(" Невозможно открыть файл\n ");

}

При работе с текстовыми файлами возможна не только поэлементная обработка файлов, но и построчная.

Пример 7.2. Построчное чтение информации из входного файла и вывод ее на экран.

#include < stdio.h>

#include < conio.h>

#include < stdlib.h>

#include < string.h>

 

void main(int argc, char *argv[])

{ FILE *f_in;

char buffer[256]; // максимальная длина строки - 255 символов

char *name; // имя входного файла

if (argc< 2) // в командной строке нет имени

{ printf(" Введите имя входного файла");

gets(name);

}

else name = argv[1]; // взять имя из командной строки

if ((f_in = fopen(name, " r"))! = NULL)

{ while (fgets(buffer, 255, f_in))! = NULL)

{ puts(buffer);

putc('\n');

}

fclose(f_in);

}

else printf(" Невозможно открыть файл\n ");

}

В цикле while присутствуют две файловые функции работы со строками: fgets() для чтения строки символов в буфер и fputs() - для записи содержимого буфера в файл.

Закрыть файл не менее важно, чем открыть его, так как в этот момент происходит заполнение ячейки таблицы размещения файлов значением, которое является признаком завершения файла и установка атрибутов файла.

Кроме того, вывод текстового файла буферизован. Это значит, что в тот момент, когда работает оператор записи в файл, фактическая запись может и не происходить, поскольку реально сначала происходит заполнение данными текстового буфера, а потом его содержимое записывается на диск. Запись буфера происходит как только он окажется полностью заполненным или при выполнении специальных команд принудительной записи на диск. Процесс записи недозаполненного буфера на диск называется флэшированием и обычно выполняется с помощью функции fflush(f_out). При необходимости завершить работу сразу со всеми открытыми файлами пользуются функцией flushall().

Закрытие файла посредством функции fclose(f_out) также включает процесс флэширования, то есть перенос информации из буфера на диск.

Доступ к элементам текстовых файлов возможен только в последовательном режиме как при записи файла, так и при его чтении.

Контрольные вопросы

1. Что включает в себя понятие файла? Как оно связано со стандартными потоками ввода/вывода?

2. Как связаны между собой понятия логического и физического файлов?

3. Что такое режим доступа? Перечислить возможные режимы доступа при работе с текстовыми файлами.

 

На оценку " 3" нужно выполнить свой вариант из табл. 7.1, на " 4" и " 5" – из табл. 7.2.

Варианты заданий

Таблица 7.1.

Номер варианта Задание
1, 15 Создать текстовый файл, содержащий целочисленные значения, следующего формата 5 21 4 37 52 9 ….Определить, являются ли значения, находящиеся в файле, упорядоченными по возрастанию. Результат записать в другой файл.
2, 16 Создать текстовый файл, содержащий целочисленные значения, следующего формата 5 21 4 37 52 9 …. Определить сумму четных элементов файла и количество нечетных. Вычисленные значения записать в другой файл.
3, 17 Создать текстовый файл, содержащий символьные значения, следующего формата 'a' '5' 'k' '! ' '#' 'v' …. Подсчитать количество буквенных, цифровых символов и символов, не являющихся ни буквами, ни цифрами. Результат записать в другой текстовый файл.
4, 18 Создать текстовый файл, содержащий целочисленные значения, следующего формата 5 21 4 37 52 9 ….Определить максимальное значение среди элементов файла, имеющих нечетные порядковые номера и записать его в другой файл, сопроводив комментариями.
5, 19 Создать текстовый файл, содержащий символьные значения, следующего формата 'a' '5' 'k' '! ' '#' 'v' … Определить максимальное среди буквенных символов. Результат записать в другой текстовый файл.
6, 20 Создать текстовый файл, содержащий целочисленные значения, следующего формата 5 21 4 37 52 9 ….Определить, сколько из значений, находящихся в файле, кратны 3.
7, 21 Создать текстовый файл, содержащий вещественные значения, следующего формата 5.3 21.4 37.4 52.6 9.2 …. Считать из файла записанные данные и определить максимальное значение. Если оно находится в первой половине файла, записать в другой файл сумму следующих за ним элементов, если во второй – сумму предыдущих элементов.
8, 22 Создать текстовый файл, содержащий целые значения, следующего формата 5 3 21 4 37 52 9 2 …. Считать из файла записанные данные и определить максимальное значение. Если оно является степенью тройки, записать в другой файл каждое третье значение данного файла, если кратно пяти – тройки, записать в другой файл сумму первого и последнего элементов.
9, 23 Создать текстовый файл, содержащий целые значения, следующего формата 5 3 21 4 37 52 9 2 …. Считать из файла записанные данные и определить сумму нечетных значений. Если оно больше введенного с клавиатуры числа, записать в другой файл четные элементы данного файла.
10, 24 Создать текстовый файл, содержащий символьные значения, следующего формата 'a' '5' 'k' '! ' '#' 'v' … Определить максимальное среди цифровых символов. Результат записать в другой текстовый файл.
11, 25 Создать текстовый файл, содержащий целые значения, следующего формата 5 3 21 4 37 52 9 2 …. Считать из файла записанные данные и определить максимальное и минимальное значения и их порядковые номера. Записать в другой файл полученные значения.
12, 26 Создать текстовый файл, содержащий символьные значения, следующего формата 'a' '5' 'k' '! ' '#' 'v' … Определить количество нецифровых символов. Результат записать в другой текстовый файл.
13, 27 Создать текстовый файл, содержащий целые значения, следующего формата 5 3 21 4 37 52 9 2 …. Считать из файла записанные данные и определить максимальное и минимальное значения и их порядковые номера. Записать в другой файл полученные значения.
14, 28 Создать текстовый файл, содержащий целые значения, следующего формата 52 3 27 41 3 5 91 24... Считать из файла записанные данные и записать в другой файл четные элементы исходного файла.

 

Таблица 7.2.

Номер варианта Задание
1, 15 Случайным образом создать таблицу пар целочисленных значений и записать её в текстовый файл в виде: X Y 5 1 2 8 12 3 - - - - Считать из файла пары значений и в тех из них, где X> Y, поменять значения X и Y местами. Результат записать в другой текстовый файл такого же формата.
2, 16 Ввести с клавиатуры попарно значения вещественного типа и записать их в текстовый файл в виде таблицы следующего формата: X: Y 2.1: 3.7 6.2: 5.4 --- - --- Считать из файла полученные пары значений и создать из них другой файл вида: sin(x): cos(y) значение sin(2.1): значение cos(3.7) --------------------- - --------------------
3, 17 Случайным образом создать таблицу пар значений и записать её в текстовый файл в виде: n * c 5 * m 7 * a 3 * q ------------------------- Считать из файла пары значений и создать из них другой текстовый файл вида mmmmm aaaaaaa qqq
4, 18 Случайным образом создать таблицу пар целочисленных значений и записать её в текстовый файл в виде: X Y 49 1 49 8 49 3 49 - 49 - Считать из файла пары значений и в тех из них, где X кратен Y, пометить строку таблицы: X Y 5 1 *** 49 8 12 3 *** 49 - в том же файле.
5, 19 Случайным образом создать таблицу пар значений и записать её в текстовый файл в виде: a b c 5.2 4.6 2.5 можно 1.2 8.9 2.3 ------------------------- Считать из файла записанные данные и определить, можно ли построить треугольник с такими сторонами. Пометить соответствующие строки таблицы (в том же файле).
6, 20 Случайным образом создать таблицу пар целочисленных значений и записать её в текстовый файл в виде: X Y 5 1 2 8 12 3 - - - - Считать из файла пары значений и в тех из них, где X+Y является четным числом, записать в другой текстовый файл такого же формата.
7, 21 Случайным образом создать таблицу пар целочисленных значений и записать её в текстовый файл в виде: X Y 5 1 2 8 12 3 - - - - Считать из файла пары значений и в тех из них, где X является степенью 2, а Y – нечетное, пометить строку таблицы: X Y. 5 8 16 3 ### 32 6 - - в том же файле.
8, 22 Случайным образом создать таблицу пар целочисленных значений и записать её в текстовый файл в виде: X Y 49 25 49 3 49 7 49 - Считать из файла пары значений и в тех из них, где X является точным квадратом Y или наоборот, найти сумму значений X и Y. Результат записать в другой текстовый файл в виде   X Y sum 5 25 30 49 3 49 7 56
9, 23 Случайным образом создать таблицу пар целочисленных значений и записать её в текстовый файл в виде: X Y 5 1 2 8 12 3 - - - - Считать из файла пары значений и в тех из них, где Y кратен X, а Х – четное, пометить строку таблицы: X Y. 5 10 2 8 *** 12 3 - - в том же файле.
10, 24 Случайным образом создать таблицу пар значений и записать её в текстовый файл в виде: a b c 5.2 4.6 2.5 можно 1.2 8.9 2.3 ------------------------- Считать из файла записанные данные и определить, можно ли построить треугольник с такими сторонами. В соответствующих строках (где можно), указать площадь полученного треугольника (в другом файле).
11, 25 Создать текстовый файл, содержащий целые значения, следующего формата 5 3 21 4 37 52 9 2... Считать из файла записанные данные и определить минимальное значение. Если оно кратно трем, заменить каждое третье значение файла нулем, если кратно пяти – заменить его суммой первого и последнего элементов.
12, 26 Случайным образом создать таблицу пар значений и записать её в текстовый файл в виде: n * c 5 * m 7 * a 3 * q ------------------------- Преобразовать эту таблицу по следующему образцу (преобразования производить в исходном файле) n * c # 5 * m mmmmm 7 * a aaaaaaa 3 * q qqq ----------------------------------------- Если первое значение не является числом, то в третьем столбце стоит один символ #
13, 27 Ввести с клавиатуры значения вещественного типа и записать их в текстовый файл в виде таблицы следующего формата: X: Y: Z 2.1: 3.7: 0.9 6.2: 5.4: 4.2 --- - ---: --- Считать из файла полученные значения и создать из них другой файл вида: sin(max{X, Y, Z}): cos(min{X, Y, Z}) значение sin(3.7): значение cos(0.9) --------------------- - --------------------
14, 28 Случайным образом создать таблицу пар целочисленных значений и записать её в текстовый файл в виде: X Y 5 1 2 8 12 3 - - - - Считать из файла пары значений и те из них, где X*Y является четным числом, записать в другой файл в виде: X Y RES 2 8 16 12 3 36 - -

 


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.008 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал