Массивы строк
Выбери формат для чтения
Загружаем конспект в формате docx
Это займет всего пару минут! А пока ты можешь прочитать работу в формате Word 👇
Лекция 2. Массивы строк
Рассмотрим программу, которая читает из файла список слов и затем выполним поиск в этом списке слов по заданному буквосочетанию.
Лучшим вариантом является чтение файла строк в массив.
Для визуального просмотра списка слов их можно вывести в компонент Memo.
Все остальные операции со строками, которые требуются по какому-либо алгоритму, нужно выполнять в массиве.
Работа с файлами при создании любых проектов является основной задачей, поэтому рассмотрим этот вариант работы.
1. Сформируем текстовый файл flow.txt:
astra
lilia
pion
tulpan
romashka
roza
siren
2. Описание файловой переменной и массива строк
Var ft:textfile; - текстовый файл на диске;
Ms:array[1..100] of string; - массив строк.
3. Назначение файловой переменной имени файла на диске:
Begin
Assignfile(ft,’flow.txt’); - файл цветов
4. Открытие файла на чтение:
Reset(ft);
5. Чтение файла и вывод строк в многострочный редактор Memo.
K:=0; - количество строк; s- строка
While not eof(ft) do
Begin
Readln(ft,s); - чтение строки в s
Inc(k); - увеличение счетчика на 1
Ms[k]:=s; - запись в массив
Form1.Memo1.Lines.Add(s); - запись в Memo
End;
Closefile(ft) - закрытие файла
В конце цикла в k – количество строк. Можно записать:
Kols:=k;
Далее мы в однострочном редакторе Edit вводили букву или буквосочетание и выводили найденные слова в Memo2.
Допустим мы создали событие при нажатии на кнопку «Найти».
Напишем команды поиска и вывода найденных слов в Memo2.
St:=Form1.Edit1.Text; - выбираем буквосочетание из Edit
Form1.Memo2.Clear; - очищаем Memo2
For i:=1 to kols do
Begin
n:=pos(st,ms[i]); - n<>0, если буквосочетание найдено, n равно номеру
Позиции
If (n<>0) then
Begin
Form1.Memo2.Lines.Add(ms[i]); - заносим слово в Memo2
End;
End;
2. Полная программа представлена ниже.
unit ustroka;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Edit1: TEdit;
Memo1: TMemo;
Memo2: TMemo;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
ft:textfile;
Ms:array[1..100] of string;
s:string;
kols:integer;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
begin
form1.Memo1.Clear;
form1.Memo2.Clear;
form1.Edit1.Clear;
end;
procedure TForm1.Button1Click(Sender: TObject);
var k:integer;
begin
Assignfile(ft,'flow.txt'); // файл цветов мы создали
Reset(ft); // Открытие файла на чтение:
K:=0; // количество строк; s- строка
While not eof(ft) do // чтение, пока не конец файла
Begin
Readln(ft,s); // - чтение строки в s
// If eof(ft) then break; // - прерывание цикла по концу файла
Inc(k); // - увеличение счетчика на 1
Ms[k]:=s; // - запись в массив
Form1.Memo1.Lines.Add(s); // - запись в Memo
End;
closefile(ft); // - закрытие файла
Kols:=k;
end;
procedure TForm1.Button2Click(Sender: TObject);
var st:string;
i,n:integer;
begin
St:=Form1.Edit1.Text; // - выбираем буквосочетание из Edit
Form1.Memo2.Clear; // - очищаем Memo2
For i:=1 to kols do
Begin
n:=pos(st,ms[i]); // - если n<>0, то n равно номеру позиции буквосочетания
If (n<>0) then
Begin
Form1.Memo2.Lines.Add(ms[i]); // - заносим слово в Memo2
End;
End;
end;
end.
3. Результат работы
4. Зачетное задание по теме.
Разработать фрагмент урока и программу.
Необходимо при чтении файла в Memo1 после всех слов вывести строку с сообщением о количестве прочитанных слов, например:
«Прочитано 10 слов».
При поиске в Memo2 тоже вывести сообщение:
«Найдено 5 слов»
Для вывода этих сообщений необходимо воспользоваться командами перевода целых чисел в символьный вид:
Sk:=inttostr(k); - sk – строка, k- целое число.
Кроме того нужно для получения результата сложить отдельные части
результирующей строки, например: s:=s+s1+s2;
Программу можно написать в среде визуального проектирования Lazarus и на языке Паскаль.