Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 11 лет назад пользователемВалентин Хрушкий
1 Программирование на языке Паскаль Текстовые файлы
2 2 Текстовый файл - это файл, компонентами которого являются символьные строки переменной длины, заканчивающиеся специальным маркером конца строки: Структура текстового файла Маркер конца строки - это последовательность из двух специальных символов по таблице ASCII «#13, #10». Символ с кодом 13 интерпретируется в компьютере как команда установки курсора в начало строки, а символ с кодом 10 - как команда перехода на следующую строку. Такая комбинация кодов вводится при нажатии клавиши ENTER.
3 3 Текстовые файлы используют для хранения и обработки текстовой информации: символов, строк, символьных массивов. Логические и числовые данные при записи в текстовые файлы должны преобразовываться в символьные строки. Следует иметь в виду, что при необходимости текстовый файл может быть создан или прочитан любым текстовым редактором, в том числе и текстовым редактором. Структура текстового файла
4 4 Файловая переменная текстового файла описывается как: Описание текстовых файлов Туре = text; Текстовые файлы используют для работы с текстами, представленными в виде строк переменной длины. Var F1: text; F2,F3: text; Var F1: text; F2,F3: text; Например:
5 5 Процедура Стандартные процедуры и функции обслуживания текстовых файлов Открывает текстовый файл на чтение. Reset(f); Открывает текстовый файл на запись. ReWrite(f); Открывает текстовый файл для дозаписи. Append(f); Закрывает текстовый файл. Close(f);
6 6 Функция Стандартные процедуры и функции обслуживания текстовых файлов возвращает TRUE, если во входном текстовом файле достигнут маркер конца строки. EOLn(f): boolean Функция определяет конец файла. Функция принимает значение TRUE, если указатель стоит в конце файла (после последней записи). Функция принимает значение FALSE, если конец файла еще не достигнут. EOF(f):boolean
7 7 Процедура Стандартные процедуры и функции обслуживания текстовых файлов обеспечивает чтение строк из файла. ReadLn(f, str:string) чтение до конца строки как вернуться назад? close ( f ); reset ( f ); { начать с начала } close ( f ); reset ( f ); { начать с начала } readln ( f, str ); ¤ 36 67¤ 56 конец строки (end of line, EOL) конец строки (end of line, EOL) конец файла end of file, EOF(f) конец файла end of file, EOF(f)
8 8 Процедура Стандартные процедуры и функции обслуживания текстовых файлов обеспечивает вывод информации в текстовый файл. Процедура строкe символов в файл, завершая ее символами #13 и #10. При вызове WriteLn допускается опускать список вывода, в этом случае в файл передается маркер конца строки (при выводе на экран это приведет к переводу курсора в начало следующей строки). WriteLn(f, s:string)
9 9 Разработать программу, которая формирует текстовый файл из 26 строк, содержащих случайное количество соответствующих прописных букв латинского алфавита. Например: ААААА ВВВВВ С DDDDDDDDDDDDDDDDDDDDD ЕЕЕЕЕЕЕЕЕЕЕЕЕЕ и т.д. Пример 1
10 10 Пример 1 Program FormTextFile; Var f:text; {файловая переменная для текстового файла} а:char; n,i:integer; fname,st:string[30]; Begin WriteLn('Введите имя файла'); ReadLn(fname); Assign(f, fname); {инициализируем файловую переменную} ReWrite(f); {открываем файл для записи} Randomize; {инициализируем генератор случайных чисел} Program FormTextFile; Var f:text; {файловая переменная для текстового файла} а:char; n,i:integer; fname,st:string[30]; Begin WriteLn('Введите имя файла'); ReadLn(fname); Assign(f, fname); {инициализируем файловую переменную} ReWrite(f); {открываем файл для записи} Randomize; {инициализируем генератор случайных чисел}
11 11 Пример 1 for а:='А' to 'Z' do begin {формируем строки} n:=Random(30)+l; st:=; for i:=l to n do st:=st+a: WriteLn(f, st); {записываем строку в текстовый файл} WriteLn(st); {для контроля - выводим ее на экран} end; Close(f); {закрываем файл} End. for а:='А' to 'Z' do begin {формируем строки} n:=Random(30)+l; st:=; for i:=l to n do st:=st+a: WriteLn(f, st); {записываем строку в текстовый файл} WriteLn(st); {для контроля - выводим ее на экран} end; Close(f); {закрываем файл} End.
12 Обработка текстовых данных 12 Задача: в файле input.txt записаны строки, в которых есть слово-паразит «короче». Очистить текст от мусора и записать в файл output.txt. Файл input.txt : Мама, короче, мыла, короче, раму. Декан, короче, пропил, короче, бутан. А роза, короче, упала на лапу, короче, Азора. Каждый, короче, охотник желает, короче, знать, где... Результат - файл output.txt : Мама мыла раму. Декан пропил бутан. А роза упала на лапу Азора. Каждый охотник желает знать, где сидит фазан.
13 Обработка текстовых данных 13 Алгоритм: 1. Прочитать строку из файла ( readln ). 2. Удалить все сочетания ", короче," ( Pos, Delete ). 3. Записать строку в другой файл. 4. Перейти к шагу 1. Обработка строки s : Особенность: надо одновременно держать открытыми два файла (один в режиме чтения, второй – в режиме записи). пока не кончились данные repeat i := Pos(', короче,', s); if i 0 then Delete(s, i, 9); until i = 0; repeat i := Pos(', короче,', s); if i 0 then Delete(s, i, 9); until i = 0; искать «, короче,» удалить 9 символов
14 Работа с двумя файлами одновременно 14 program qq; var s: string; i: integer; fIn, fOut: text; begin assign(fIn, 'input.txt'); reset(fIn); assign(fOut, 'output.txt'); rewrite(fOut); { обработать файл } close(fIn); close(fOut); end. fIn, fOut: text; файловые переменные открыть файл для чтения открыть файл для записи
15 Полный цикл обработки файла 15 while not eof(fIn) do begin readln(fIn, s); writeln(fOut, s); end; while not eof(fIn) do begin readln(fIn, s); writeln(fOut, s); end; repeat i := Pos(', короче,', s); if i 0 then Delete(s, i, 9); until i = 0; пока не достигнут конец файла обработка строки запись «очищенной» строки
16 Задания 16 В файле input.txt записаны строки, сколько их – неизвестно. «3»: Заменить все слова «короче» на «в общем» и записать результат в файл output.txt. «4»: Вывести в файл output.txt только те строки, в которых есть слово «пароход». В этих строках заменить все слова «короче» на «в общем». «5»: Вывести в файл output.txt только те строки, в которых больше 5 слов (слова могут быть разделены несколькими пробелами).
17 Сортировка списков 17 Задача: в файле list.txt записаны фамилии и имена пользователей сайта (не более 100). Вывести их в алфавитном порядке в файл sort.txt. Файл list.txt : Федоров Иван Иванов Федор Анисимов Никита Никитин Николай Результат – файл sort.txt : Анисимов Никита Иванов Федор Никитин Николай Федоров Иван Нужен ли массив! ? Для сортировки нужен массив! !
18 Сортировка списков 18 Алгоритм: 1)прочитать строки из файла в массив строк, подсчитать их в переменной N 2)отсортировать первые N строк массива по алфавиту 3)вывести первые N строк массива в файл Объявление массива (с запасом): const MAX = 100; var s: array[1..MAX] of string; const MAX = 100; var s: array[1..MAX] of string;
19 Сортировка списков 19 Ввод массива строк из файла: assign(f, 'list.txt'); reset(f); N:= 0; while not eof(f) do begin N:= N + 1; readln(f, s[N]); end; close(f); assign(f, 'list.txt'); reset(f); N:= 0; while not eof(f) do begin N:= N + 1; readln(f, s[N]); end; close(f); var f:Text; N: integer; var f:Text; N: integer;
20 Сортировка списков 20 Сортировка первых N элементов массива: for i:=1 to N-1 do begin nMin:= i; for j:=i+1 to N do if s[j] < s[nMin] then nMin:= j; if i nMin then begin c:= s[i]; s[i]:= s[nMin]; s[nMin]:= c; end; for i:=1 to N-1 do begin nMin:= i; for j:=i+1 to N do if s[j] < s[nMin] then nMin:= j; if i nMin then begin c:= s[i]; s[i]:= s[nMin]; s[nMin]:= c; end; var i, j, nMin: integer; c: string; var i, j, nMin: integer; c: string; Какой метод? ?
21 Сортировка списков 21 Вывод первых N строк массива в файл: assign(f, 'sort.txt'); rewrite(f); for i:=1 to N do writeln(f, s[i]); close(f); assign(f, 'sort.txt'); rewrite(f); for i:=1 to N do writeln(f, s[i]); close(f); var f:Text; i, N: integer; var f:Text; i, N: integer;
22 Сортировка списков 22 Как сравниваются строки: Парохо д¤ Паровоз ¤ || ? s1 s2s2 Кодовая таблица: АБВ…Яабв…х…я … …245… … …1093…1103 Win UNICODE код('х') > код('в') 'х' > 'в''х' > 'в' 'Пароход' > 'Паровоз' Что больше? ?
23 Сортировка списков 23 Как сравниваются строки: Парохо д¤ Пар ¤ || ? s1 s2s2 'х' > ¤'х' > ¤ 'Пароход' > 'Пар' Любой символ больше пустого! !
24 Сортировка списков 24 Работа с отдельной строкой массива: var s: array[1..MAX] of string; c: string; {вспомогательная строка}... for i:=1 to N do begin с:= s[i]; { работаем со строкой c, меняем ее } s[i]:= c; end; var s: array[1..MAX] of string; c: string; {вспомогательная строка}... for i:=1 to N do begin с:= s[i]; { работаем со строкой c, меняем ее } s[i]:= c; end;
25 Задания 25 «3»: Добавить к списку нумерацию: 1) Анисимов Никита 2) Иванов Федор «4»: Выполнить задачу на «3» и сократить имя до первой буквы: 1) Анисимов Н. 2) Иванов Ф. «5»: Выполнить задачу на «4», но при выводе начинать с имени: 1) Н. Анисимов 2) Ф. Иванов
26 Списки с числовыми данными 26 Задача: в файле marks.txt записаны фамилии и имена школьников и баллы, полученные ими на экзамене (0-100). В файле не более 100 строк. Вывести в файл best.txt список тех, кто получил более 75 баллов. Файл marks.txt : Федоров Иван 78 Иванов Федор 63 Анисимов Никита 90 Никитин Николай 55 Результат – файл best.txt : Федоров Иван 78 Анисимов Никита 90 Нужен ли массив! ? Используем два файла одновременно! !
27 Работа с двумя файлами одновременно 27 var fIn, fOut: Text;... assign(fIn, 'marks.txt'); reset(fIn); assign(fOut, 'best.txt'); rewrite(fOut); while not eof(fIn) do begin { обработка строк из файла } end; close(fIn); close(fOut); var fIn, fOut: Text;... assign(fIn, 'marks.txt'); reset(fIn); assign(fOut, 'best.txt'); rewrite(fOut); while not eof(fIn) do begin { обработка строк из файла } end; close(fIn); close(fOut);
28 Цикл обработки файла 28 var ball: integer;... while not eof(fIn) do begin readln(fIn, s); { обработка строки s } { ball:= результат на экзамене } if ball > 75 then writeln(fOut, s); end; var ball: integer;... while not eof(fIn) do begin readln(fIn, s); { обработка строки s } { ball:= результат на экзамене } if ball > 75 then writeln(fOut, s); end; Оба файла открыты одновременно! !
29 Преобразования «строка»-«число» 29 Из строки в число: s := '123'; Val ( s, N, r ); { N = 123 } { r = 0, если ошибки не было r – номер ошибочного символа} s := ' '; Val ( s, X, r ); { X = } s := '123'; Val ( s, N, r ); { N = 123 } { r = 0, если ошибки не было r – номер ошибочного символа} s := ' '; Val ( s, X, r ); { X = } Из числа в строку: N := 123; Str ( N, s ); { '123' } X := ; Str ( X, s ); { ' E+002' } Str ( X:10:3, s ); { ' ' } N := 123; Str ( N, s ); { '123' } X := ; Str ( X, s ); { ' E+002' } Str ( X:10:3, s ); { ' ' } var N, r: integer; X: real; s: string; var N, r: integer; X: real; s: string;
30 Обработка строки 30 n:= Pos(' ', s); { n:= 7; } fam:= Copy(s,1,n-1); { fam:= 'Пупкин'; } Delete(s, 1, n); { s:= 'Вася 82'; } n:= Pos(' ', s); { n:= 5; } name:= Copy(s,1,n-1); { name:= 'Вася'; } Delete(s, 1, n); { s:= '82'; } Val(s, ball, r); { ball:= 82; } n:= Pos(' ', s); { n:= 7; } fam:= Copy(s,1,n-1); { fam:= 'Пупкин'; } Delete(s, 1, n); { s:= 'Вася 82'; } n:= Pos(' ', s); { n:= 5; } name:= Copy(s,1,n-1); { name:= 'Вася'; } Delete(s, 1, n); { s:= '82'; } Val(s, ball, r); { ball:= 82; } var n, r: integer; s, fam, name: string; var n, r: integer; s, fam, name: string; ПупкинВася82 s: n 1 n 1
31 Задания 31 «3»: Добавить к списку нумерацию: 1) Федоров Иван 78 2) Анисимов Никита 90 «4»: Выполнить задачу на «3» и сократить имя до первой буквы: 1) Федоров И. 78 2) Анисимов Н. 90 «5»: Выполнить задачу на «4», но отсортировать список по алфавиту. 1) Анисимов Н. 90 2) Федоров И. 78 «6»: Выполнить задачу на «4», но отсортировать список по убыванию отметки (балла).
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.