Объект TStrings | |
  | |
Данный объект предназначен дл� работы с массивом строк. Он содержит довольно удобный набор методов и свойств дл� доступа к любой строке из массива и дл� различных манипул�ций с ними. Объект TStrings компонентом не �вл�етс�. Он �вл�етс� пр�мым потомком TPersistent, что говорит о том, что этот объект может писать свои данные в поток и читать их оттуда. Этот объект используетс� компонентами, которые содержат массивы строк,а это списки TListBox, раскрывающиес� списки TComboBox, таблицы TStringGrid и другие. �акже можно создавать не св�занные с компонентами массивы строк дл� разных нужд, так как этот объект содержит довольно комплексный набор средств дл� работ с ними и не нужно изобретать велосипедов.
|
|
  | |
Свойства TStrings | |
�ак как данный объект служит дл� работы со строками, то его свойства определ�ют все, что с этими строками св�зано. Во первых это массив Strings, который �вл�етс� непосредственно самим массивом строк, через него можно получить любую строку. Во вторых это свойство Count, в котором записано количество строк, наход�щихс� в этом массиве. �акже здесь есть довольно хитрые, облегчающие работу свойства. Если, допустим, вы работаете со строками типа Date=25.07.1981, то данный объект умеет раздел�ть строку на левую и правую часть. В данном случае левые части хран�тс� в массиве Names, а правые соответственно в массиве Values. Разумеетс�, если ваши строки не имеют такой формат, то смысл этих значений тер�етс�. Если сказать конкретно, то дл� такого типа строки: Strings[2]:=Names[2]+'='+Values[2]; �акже объект TStrings имеет определенные расширени� по отношению к простому массиву строк. Дело в том, что к каждой строке можно подв�зать определенный объект! Любой! Дл� этого используетс� свойство Objects. Этот массив полностью соответствует по своей нумерации массиву Strings, однако позвол�ет логически подв�зать к строке объект. Это свойство объ�вл�етс� как: Objects: array of TObject что говорит о том, что можно подв�зать СОВЕРШЕННО ЛЮБОЙ объект к строке. Допустим у вас есть список людей и фотографии дл� них. К примеру имена людей: 'Андрей', 'Вас�' и 'Сергей', а их фотограффии хран�тс� в файлах 'andrey.bmp', 'vasya.bmp' и 'sergey.bmp'. В этом случае было бы удобно к имени каждого человека подв�зать картинку. Однако это свойство не работает в TStrings напр�мую, а работает в его потомках. Однако рассмотрим пример, как можно это сделать:
var
end; Вот таким образом мы получили структуру, состо�щую из строк и картинок, ассоциированных с ними. Причем дл� загрузки всех картинок мы использовали всего одну переменную B1. Просто каждый раз мы освобождали пам�ть дл� нее и загружали снова. �еперь можно на основе объекта получить строку, ассоциированную с ним и с помощью строки получить объект, ассоциированный с ней. И строки и объекты идут под одной нумерацией. Довольно удобно! �аким образом можно подв�зывать к каждой строке массив строк, или даже целую таблицу, создава� таким образом структуры любой сложности. В объекте TStrings есть еще два свойства: Text и CommaText. Через свойство Text можно получить весь массив строк в виде одной строки, разделенной символами возврата каретки. Свойство CommaText позвол�ет получить весь массив в виде строки, оформленной определенным образом. Допустим у нас есть массив TStrings со следующими строками:
MyStr.Strings[0]:='Андрей';
"Андрей","Вас�","Сергей". Вот то, что касаетс� свойств TStrings. Можно напр�мую назначать эти свойства и читать их. Однако данный объект имеет обширный набор методов, позвол�ющих упростить процесс работы с элементами всех этих массивов. Далее мы рассмотрим эти методы. |
|
  | |
Методы TStrings | |
Методы TStrings работают с данными массивами. Они позвол�ют добавл�ть элементы к массиву, вставл�ть, удал�ть, перемещать и искать. �акже можно перекидывать один массив в другой. | |
  | |
Работа со строками | |
Данный набор методов позвол�ет производить различные манипул�ции со строками массива. Метод Add(S) добавл�ет строку S в конец массива. Этот метод возвращает номер этой строки в этом массиве. Метод Append(S) делает то же самое, только не возвращает номера. Метод Insert(I,S) вставл�ет строку S в позицию I массива строк. Метод Delete(I) удал�ет строку c номером I из массива. �акже есть методы, позвол�ющие получить и установить свойство Text. Метод GetText позвол�ет получить содержимое свойства Text и записать его в какую-нибудь переменную. Свойство SetText(S) позвол�ет записать содержимое S в свойство Text. Соответственно это полностью изменит то, что было в массиве строк. �акже можно искать строки в массиве. Метод IndexOf(S) ищет строку S в массиве и если она есть - возвращает ее номер. Если строка S встречаетс� несколько раз, то возвращаетс� перва� встречна�. Метод IndexOfName(S) служит дл� работы со строками Им�=Значение и возвращает номер строки где "Им�" соответствует S. Еще здесь существет метод Move(I,I1), позвол�ющий перемещать строку из позиции I в позицию I1 массива. Этот метод может быть полезен при сортировке. �акже можно помен�ть две строки местами с помощью метода Exchange(I,I1). В данном случае строки с номерами I и I1 помен�ютс� местами. | |
  | |
Работа с ассоциированными объектами | |
С ассоциированными объектами можно поступать также как и со строками. Их можно добавл�ть, вставл�ть и удал�ть. �олько методы дл� работы с объектами более комплексны. Допустим метод AddObject(S,O) позвол�ет добавить к массиву И строку И объект ассоциированный с ним. Аналогично InsertObject(I,S,O) вставл�ет в позицию I и строку и объект, ассоциированный с ней. Дл� удалени� объекта используетс� тот же метод Delete(I), который удал�ет и строку, и ассоциированный с ней объект. Удалить строку оставив ассоциированный с ней объект невозможно.Дл� того чтобы добавить объект к строке не мен�� строки при этом придетс� заниматьс� ручным приравниванием. Допустим, чтобы добавить к строке "Вас�", объект картинки B1, нужно написать так. MyFriends.Objects[MyFriends.IndexOf('Вас�')]:=B1; �акже можно мен�ть строки и их объекты местами с помощью метода Excahge(I,I1). В этом случае элементы с номерами I и I1 помен�ютс� местами. | |
  | |
Работа с массивами | |
Выше была описана работа с отдельными элементами. Однако в некоторых случа�х нужно работать с массивами в целом. Массивы можно загружать из файла, из потока, из другого аналогичного массива. Массивы можно сравнивать, удал�ть и т.д. Можно загрузить данные в массив TStrings из другого массива с помощью метода Assign(TS), где TS, это им� другого массива TStrings, откуда данные будут загружены. В данном случае будут добавлены не только строки, но и объекты. Можно добавить данные одного TStrings в конец другого. Это делаетс� методом AddStrings(TS). Работает аналогично Assign, однако он не затирает все что было в объекте назначени�, а добавл�ет данные объекта-источника в конец объека назначени�. Метод LoadFromFile(F) позвол�ет загрузить строки из файла F. В данном случае загружаютс� только строки, а не ассоциированные объекты. Данные файла должны быть представлены в виде строк, разделенных символом возврата каретки. Метод SaveToFile(F) записывает массив строк в файл F. Методы LoadFromStream(Stream:TStream) и SaveToStream(Stream:TStream) позвол�ют загружать строки из потока Stream и сохран�ть их в нем. �акже у объекта TStrings есть вспомогательный метод Equals(TS1,TS2), который сравнивает содержимое двух объектов TStrings и возвращает True, если они равны и False если нет. Чтобы объекты были равны, нужно чтобы у них было одинаковое количество строк, а также, кажда� строка вместе с ассоциированным объектом должна быть равна соответствующей строке другого TStrings вместе с объектом, т.е. TS1.Strings[0]=TS2,Strings[0] и т.д. И еще, последнее, самое жестокое. Содержимое объекта TStrings можно жестоко удалить методом Clear.
| |
  | |
Другие вспомогательные методы | |
�аже объект TStrings содержит несколько дополнительных, глобальных методов, которые относ�тс� к внутренним аспектам данного объекта. Это методы Create, Destroy и Free, которые идут далеко от объекта TObject и �вл�ютс� необходимыми в том случае, если вы сами создаете объект TStrings. �е объекты, которые ассоциированы с компонентами забот�тс� о себе сами. Эти методы описаны в описании объекта TObject, однако повторюсь. Метод Create создает объект и выдел�ет дл� него пам�ть. Метод Destroy удал�ет объект и освобождает выделенную под него пам�ть. Метод Free тоже удал�ет объект, выполн�� предварительную проверку на тот случай, если объект уже был удален. Лучше дл� удалени� пользоватьс� именно им. �акже существуют два довольно важных метода BeginUpdate и EndUpdate. Дл� объекта TStrings они абстрактны, однако потомки этого метода конкретизируют их дл� себ�. Эти методы нужно вызывать дл� визуальных компонентов, при изменении их массива элементов. Метод BeginUpdate вызываетс� перед тем, как что-то было изменено, а метод EndUpdate после. Это обеспечит реакцию визуального компонента на это. Допустим, после того как вы добавили строку в таблицу, ей нужно перерисовать себ� чтобы эту строку показать. EndUpdate делает это. |
|
  | |
Заключение | |
Вот все то, что можно делать с массивами строк через объект TStrings. РАБО�А СО С�РОКАМИ И ИХ ОБЪЕК�АМИ
Add(S:String);
Объект TStrings �вл�етс� слишком абстрактным дл� того, чтобы работать со строками использу� все описанные выше возможности напр�мую. Поэтому дл� более полной работы нужно использовать его более специализированных потомков. Допустим объект TStrings содержит массив Objects и методы дл� работы с ним, хот� реально работать с этим массивом не может. Поэтому, если вы хотите работать с массивом строк и ассоциированных объектов, нужно использовать его потомка TStringList. Читайте об этом далее. А пока с этой частью все. Удачной Вам работы! С уважением А.Германов. |