Как работать с файлами?

Содержание

Слайд 2

Принцип сэндвича хлеб хлеб начинка ifstream Fin; // поток ввода ofstream

Принцип сэндвича

хлеб

хлеб

начинка

ifstream Fin; // поток ввода
ofstream Fout; // поток вывода

Fin.open

( "input.txt" );
Fout.open ( "output.txt" );
// здесь работаем с файлами
Fin.close();
Fout.close();

#include

файловые потоки

Слайд 3

Обработка ошибок ifstream F; F.open ( "input.txt" ); if ( F

Обработка ошибок

ifstream F;
F.open ( "input.txt" );
if ( F )

{
// здесь работаем с файлом
}
else
printf ( "Открыть файл не удалось." );

if ( F != NULL )

Слайд 4

Ввод данных int a, b; ifstream Fin; Fin.fopen ( "input.txt" );

Ввод данных

int a, b;
ifstream Fin;
Fin.fopen ( "input.txt" );
fclose ( Fin );


Fin.close();
Fin.open ( "input.txt" );

Fin >> a >> b;

Переход к началу открытого файла:

if ( Fin.eof() )
printf("Данные кончились");

Определение конца файла:

eof = end of file, конец файла

Слайд 5

Вывод данных в файл int a = 1, b = 2;

Вывод данных в файл

int a = 1, b = 2;
ofstream Fout;
Fout.open

( "output.txt" );
Fout.close();

Fout << a << "+" << b << "=" << a + b;

Слайд 6

Чтение неизвестного количества данных пока не конец файла // прочитать число

Чтение неизвестного количества данных

пока не конец файла
// прочитать число из

файла
// добавить его к сумме

Задача. В файле записано в столбик неизвестное количество чисел. Найти их сумму.

int S, x;
S = 0;
while( ! Fin.eof() )
{
if ( Fin >> x )
S = S + x;
}

Если удалось прочитать число, …

Слайд 7

Задачи «A»: Напишите программу, которая находит среднее арифметическое всех чисел, записанных

Задачи

«A»: Напишите программу, которая находит среднее арифметическое всех чисел, записанных в

файле в столбик, и выводит результат в другой файл.
«B»: Напишите программу, которая находит минимальное и максимальное среди чётных положительных чисел, записанных в файле, и выводит результат в другой файл. Учтите, что таких чисел может вообще не быть.
«C»: В файле в столбик записаны целые числа, сколько их – неизвестно. Напишите программу, которая определяет длину самой длинной цепочки идущих подряд одинаковых чисел и выводит результат в другой файл.
Слайд 8

Обработка массивов Задача. В файле записано не более 100 целых чисел.

Обработка массивов

Задача. В файле записано не более 100 целых чисел. Вывести

в другой текстовый файл те же числа, отсортированные в порядке возрастания.

const int MAX = 100;
int A[MAX];

Слайд 9

Обработка массивов Ввод массива: N = 0; while ( N {

Обработка массивов

Ввод массива:

N = 0;
while ( N < MAX && !Fin.eof()

)
{
if ( Fin >> A[N] ) N ++;
}

N < MAX

Слайд 10

Обработка массивов Вывод результата: Fout.open ( "output.txt" ); for ( i

Обработка массивов

Вывод результата:

Fout.open ( "output.txt" );
for ( i = 0; i

< N; i++ )
Fout << A[i] << endl;
Fout.close();

N

Слайд 11

Задачи «A»: В файле записано не более 100 чисел. Отсортировать их

Задачи

«A»: В файле записано не более 100 чисел. Отсортировать их по

возрастанию последней цифры и записать в другой файл.
«B»: В файле записано не более 100 чисел. Отсортировать их по возрастанию суммы цифр и записать в другой файл. Используйте функцию, которая вычисляет сумму цифр числа.
«C»: В двух файлах записаны отсортированные по возрастанию массивы неизвестной длины. Объединить их и записать результат в третий файл. Полученный массив также должен быть отсортирован по возрастанию.
Слайд 12

Обработка строк Задача. В файле записано данные о собаках: в каждой

Обработка строк

Задача. В файле записано данные о собаках: в каждой строчке

кличка собаки, ее возраст и порода:
Мухтар 4 немецкая овчарка
Вывести в другой файл сведения о собаках, которым меньше 5 лет.

пока не конец файла(Fin)
// прочитать строку из файла Fin
// разобрать строку – выделить возраст
если возраст < 5 то
// записать строку в файл Fout

Слайд 13

Чтение строк из файла while ( getline(Fin, s) ) { //

Чтение строк из файла

while ( getline(Fin, s) )
{
// обработать

строку s
}

Чтение одной строки:

string s;
getline( Fin, s );

строка

входной поток

Чтение всех строк:

Слайд 14

Обработка строк // найти в строке пробел // удалить из строки

Обработка строк

// найти в строке пробел
// удалить из строки кличку с

первым пробелом
// найти в строке пробел
// выделить возраст перед пробелом
// преобразовать возраст в числовой вид

Разбор строки:

string s, s1;
int p, age;
...
p = s.find ( ' ' );
s1 = s.substr ( p + 1 );
age = atoi ( s1.c_str() );

Мухтар 4 немецкая овчарка

p+1

не влияет!

к формату строк Си

4 немецкая овчарка

до конца строки

Слайд 15

Задачи «A»: В файле записаны данные о результатах сдачи экзамена. Каждая

Задачи

«A»: В файле записаны данные о результатах сдачи экзамена. Каждая строка

содержит фамилию, имя и количество баллов, разделенные пробелами:
<Фамилия> <Имя> <Количество баллов>
Вывести в другой файл фамилии и имена тех учеников, которые получили больше 80 баллов.
«B»: В предыдущей задаче добавить к полученному списку нумерацию, сократить имя до одной буквы и поставить перед фамилией:
П. Иванов
И. Петров
...