Работа с динамическими массивами в Delphi

Что такое динамический массив? Динамический массив есть контейнер, содержащий определенное число данных, которые могут быть записаны либо извлечены для каких-нибудь с ними действий. Проще говоря, это лимитированный список различных значений одной переменной (Integer, String и т.д.), каждый из которых можно затребовать простым указанием порядкового номера. Зачем он нужен? как с ним работать? — читайте далее и всё поймете.

Прежде всего, надо продекларировать наш массив (то бишь записать его название). Название массива имеет такой вид:


<Имя_Массива>: Array[<область_определения>] of <Тип_переменных>
Идентификаторы Array и of постоянны, так что их нужно указывать в любом случае. Имя массива зависит только от вашей фантазии. Область определения имеет вид [X..Y], где первая величина — наименьшее значение числа определяемых параметров, вторая — наибольшее. Заметьте, данное свойство указывается именно в квадратных скобках — собственно значения X и Y входят в область определения массива. Повторю, что эти значения определяют именно порядковые номера хранящихся в массиве значений и предназначены для их чтения («вытаскивания» из массива) посредством указания порядкового номера. X и Y могут быть только простыми числами. Так же они могут быть частями какого-либо упорядоченного целого: например, можно указать [‘а’..’я’], и массив будет состоять из тридцати трех значений (по числу букв алфавита).

Далее после идентификатора of указывается тип переменных, в котором хранятся данные в массиве. Если это Boolean, то всякий параметр может иметь значение только True или False. Если Integer — то этот же параметр является простым числом, и т.д.

Сейчас мы по всем правилам продекларируем какой-нибудь массив:


EditArray: Array[1..5] of String  

Наметанным глазом можно прочитать здесь следующее: имеется массив с именем EditArray, в котором хранится пять различных значений типа String (текст). Кажется, всё правильно :). Но этот массив пуст: в нем нет еще никаких данных. Сейчас мы используем его, чтобы запомнить строковую информацию, содержащуюся в TEdit’ах и, когда нужно, достать ее.

Выложите на форму пять компонентов TEdit и две кнопки. Назовите их GetBtn и ResultBtn. Чтобы можно было отличать строки ввода друг от друга, измените им в редакторе свойств параметр Tag: у Edit1 на «1», у Edit2 на «2» и так далее вплоть до «5» у Edit5.


//...  
var  
Form1: TForm1;  
EditArray: Array[1..5] of String;  
//...  
  
//записываем информацию в массив  
procedure TForm1.GetBtnClick(Sender: TObject);  
var  
i: integer;  
begin  
//перебираем все компоненты   
for i:=0 to ComponentCount-1 do  
if Components[i] is TEdit then  
EditArray[TEdit(Components[i]).Tag]:=TEdit(Components[i]).Text;  
end;  
   
//читаем информацию из массива  
procedure TForm1.SetBtnClick(Sender: TObject);  
var  
i: integer;  
begin  
for i:=0 to ComponentCount-1 do  
if Components[i] is TEdit then  
TEdit(Components[i]).Text:=EditArray[TEdit(Components[i]).Tag];  
end;  

Теперь введите в Edit’ы какой-нибудь текст и нажмите GetBtn. Сотрите текст и нажмите ResultBtn.

Ага! Вот мы и поработали с декларированным массивом. Но надо иметь ввиду, что есть и константированные массивы с изначально записанными значениями, которые нельзя изменить. Такие массивы прописываются в разделе const. Они полезны, когда нужно выполнить множество низкоуровневых операций.

В одном из последних выпусков журнала «Хакерспец» вебмастерам предлагался весьма простой способ обозначить копирайт текстов своего сайта: менять некоторые русские буквы на латинские, которые выглядят точно так же. (Чтобы, буде информацию все-таки умыкнут, можно было воспользоваться этим отличием для подтверждения авторских прав). Вот моя реализация данного совета с помощью констатированного массива. Осчастливьте вашу форму компонентами TRichEdit и TButton, по событию OnClick последнего поставьте следующий код:


procedure TForm1.Button1Click(Sender: TObject);  
const  
RusSymbols: Array[1..10] of ShortString = ('а','с','о','р','х','А','С','О','Р','Х');  
EngSymbols: Array[1..10] of ShortString = ('a','c','o','p','x','A','C','O','P','X');  
var  
i, position: integer;  
Text: String;  
begin  
Text:=RichEdit1.Lines.Text;  
repeat  
//Массив состоит из десяти символов,   
//поэтому цикл повторится 10 раз.  
for i:=1 to 10 do begin  
position:=pos(RusSymbols[i],Text);  
if position>0 then begin  
delete(Text,position,1);  
insert(EngSymbols[i],Text,position);  
end;  
end;  
until position<=0;  
RichEdit1.Lines.Text:=Text;  
end;  

Закодируйте таким образом какой-нибудь текст и проверьте правописание полученного в MS Word.

Теперь вы знаете простейшие примеры работы с динамическими массивами.

Автор: Трофим Роцкий
Теги:
массив
Добавлено: 07 Августа 2018 21:33:28 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...