Работа с динамическими массивами в Delphi (исходники, документация)

Источник: codingclub
Трофим Роцкий

Что такое динамический массив? Динамический массив есть контейнер, содержащий определенное число данных, которые могут быть записаны либо извлечены для каких-нибудь с ними действий. Проще говоря, это лимитированный список различных значений одной переменной (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.

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


Страница сайта http://test.interface.ru
Оригинал находится по адресу http://test.interface.ru/home.asp?artId=3381