|
|
|||||||||||||||||||||||||||||
|
Работа с динамическими массивами в 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. Теперь вы знаете простейшие примеры работы с динамическими массивами. Ссылки по теме
|
|