Разместите нашу кнопку!

Новые статьи:

Programming articles

Создание сайтов на шаблонах

Множество вариантов работы с графикой на канве

Шифруем файл с помощью другого файла

Перехват API функций - Основы

Как сделать действительно хороший сайт

Создание почтового клиента в Delphi 7

Применение паскаля для решения геометрических задач

Управление windows с помощью Delphi

Создание wap сайта

Операционная система unix, термины и понятия

SQL враг или друг

Возникновение и первая редакция ОС UNIX

Оптимизация проекта в Delphi

Ресурсы, зачем нужны ресурсы

Термины программистов 20 века

Советы по созданию собственного сайта с нуля

Шифруем файл с помощью пароля

Фракталы - геометрия природы

Crypt - Delphi программа для шифрования

Рассылка, зачем она нужна и как ее организовать?

Учебник по C++ для начинающих программистов

Уроки для изучения ассемблера

Загадочный тип PCHAR

Средства по созданию сайтов

Операторы преобразования классов is и as

Borland Developer studio 2006. Всё в одном

Создание базы данных в Delphi, без сторонних БД


Software engineering articles



Архив рассылки

    В нашей рассылке вы узнаете о новых статьях, программах, и темах на форуме. Рассылка выходит один раз в неделю, каждый четверг.
Подписаться на рассылку можно в этой форме:
Клуб программистов
Последний выпуск

39 выпуск

Клуб программистов

  Новости
  Лабораторные работы
  Справочники
  Книги
  Основы Delphi
  Клуб
  Ссылки
  Архив рассылки
 

Форум программистов

  Общие вопросы Delphi
  Работа с сетью
  Win Api
  БД в Delphi
  Безопасность
  Паскаль
  Помощь студентам
  Assembler
  2D игры
  3D игры
  Общие вопросы Java
  Java и Web
  Основы С++
  Html
  PHP
  Microsoft Office Word
  Microsoft Office Excel
  Microsoft Office Access
  Microsoft Office Outlook
  Работа постоянная
  Работа для программиста
  О форуме и сайтах клуба
  Обсуждение статей
  Обсуждение программ
  Свободное общение
 

Блог программистов

  Новости
  Borland Delphi
  Базы данных
  Хакинг
  Win Api
  Создание сайтов
 
ОТ РЕДАКТОРА
 

Приветствую вас, наших подписчиков, в 39 выпуске рассылки "Клуб программистов". Поздравляю всех с прошедшим праздником победы! Программисты воюют?

Ну вроде бы все. А если честно, лень мне уже рассылку делать :) В следующем выпуске придумаю чего-нибудь необычное и интересное.

 
 
КЛАСС TSTRINGLIST
 
Сегодня я расскажу про класс TStringList, который является заменой массивам из элементов типа string и предоставляет набор функций для работы с массивом строк. Этот тип так же позволяет сохранять список строк в текстовый файл, и загружать список из текстового файла. Этот класс является полной заменой старым функциям по работе с текстовыми файлами Read(Ln) и Write(Ln). Эта статья в первую очередь для чайников - всем чайникам не отрываться от экрана, и не отвлекаться на другие вещи! Но профессионалам не помешает «читануть» эту статью. Фактически эта статья это почти полный мануал по классу TStringList.

   Начнём сначала. Сначала «родословную» класса:
TStringList = class (TStrings)
TStrings = class (TPersistent)
TPersistent = class (TObject)

   Класс TStrings является абстрактным классом, все ключевые свойства и методы абстрактны, т.е. объявлены как abstract, и требуют обязательного переобъявления классах потомках, что и сделано в классе TStringList.
   Для того чтобы можно было работать с этим классом, надо создать экземпляр этого
класса - объект. Создание объекта TStringList:

Var
 STR: TStringList;
Begin
 STR:= TStringList.Create;

   Итак, объект создан. Для добавления строки используется метод Add единственным параметром, которого является добавляемая строка. Строка будет добавлена после самой последней строки. Тоже самое делает метод Append. Для того чтобы вставить строку в определённую позицию надо использовать функцию Insert.

procedure Insert(Index: Integer; const S: string ); override ;

параметр Index задаёт позицию добавляемой строки, если указать 0, то строка будет самой первой, если 1, то строка будет второй. Разумеется нумерация с нуля. Строка, которая стоит на этой позиции будет сдвинута вперёд. Нельзя указывать индекс строки больше чем строк в списке, произойдёт исключение. Ну и для удаления строки используется функция Delete, в качестве единственного параметра которой надо указывать индекс строки для удаления. Весь список строк предоставляется свойством-массивом Strings. Оно доступно как для чтения так и для изменения. Используется это свойство так:

ShowMessage(STR.Strings[1]);
выведется вторая строка в массиве. Описание свойства
property Strings[Index: Integer]: string read Get write Put;
default ;

Отсюда видно, что оно свойство по умолчанию. Поэтому его можно не указывать можно просто:
ShowMessage(STR[5]);

   Для получения количества элементов используется функция Count, которая возвращает количество элементов в списке. Весь список очищается с помощью метода Clear.

   Для получения индекса строки используется функция IndexOf, которая принимает строку, и возвращает индекс строки, если результат -1, строка не найдена. Свойство CaseSensitive задаёт чувствительность к регистру символов при поиске, если False, то заглавные и строчные буквы это одно и то же при поиске и других операциях.

   Для того чтобы поменять местами две строки есть метод Exchange, которой надо передать два числа которые задают индексы строк. Для перемещения строки на новую позицию используется функция Move, передав ей индекс строки для перемещения и индекс новой позиции.

   TStringList позволяет сортировать список в алфавитном порядке. Для сортирования всего списка в алфавитном порядке надо вызвать метод Sort или присвоить свойству Sorted значение True. После сортировки обратно вернуть строки на свои места невозможно. Различие между этими методами сортировки в том, что метод Sort просто сортирует список, а при присваивании свойству значения True, каждое добавляемое значение будет сортироваться, и воспользоваться методом Insert будет невозможно – будет генерироваться исключение. Так же нельзя использовать функции Exchange и Move. Для отсортированных списков рекомендуется использовать функцию Find для поиска строки. Эта функция возвращает True, если строка найдена. Пример:

if str.Find(’222′,i) then
 ShowMessage(IntToStr(i));
Вторым параметром надо передавать переменную, в которую функция сохранит индекс найденной строки. Для контроля добавляемых значений в отсортированный список используется свойство Duplicates.
TDuplicates = (dupIgnore, dupAccept, dupError);

Если указано dupIgnore, то контроля нет. Если указано dupError, то при добавлении строки которая уже есть, будет генерироваться исключение. Если указано dupAccept, то при добавлении строки, которая уже есть, она не будет добавляться.

   Для добавления группы строк используется функция AddStrings, которая принимает объект TStrings или TStringList. Примеры:

Memo1.Lines.AddStrings(STR);
Memo1.Lines.AddStrings(Memo2.Lines);

   Для того чтобы сохранить список в файл используется функция SaveToFile, которая принимает путь к файлу. Соответственно для загрузки из текстового файла надо вызвать функцию LoadFromFile с таким же параметром.

   Для сравнения списка с другим списком надо вызвать функцию Equals и передать ей в качестве единственного параметра объект типа TStrings или TStringList. Пример:

if Memo1.Lines.Equals(Memo2.Lines) then
 ShowMessage(’Совпадают’);
Или
if STR.Equals(STR1) then
 ShowMessage(’Совпадают’);

   Функция GetText возвращает весь список в виде единого текста в качестве своего результата (результат имеет тип PChar). Что делает функция SetText я думаю уже понятно. Свойство Text доступно как для чтения, так и для записи позволяет работать со всем списком в виде единого текста как с одной строкой.

   Свойство DelimitedText позволяет конвертировать список в единый текст с разделителями. Распинаться не буду, приведу пример. Например, есть список:

Stri,ng 1
Stri"ng 2
String 3
String4

Свойство CommaText будет иметь значение:

"Stri,ng 1","Stri""ng 2","String 3",String4

Символ разделитель задаётся символом свойством Delimiter, а символ кавычек задаётся свойством QuoteChar. Свойство CommaText позволяет конвертировать список в SDF - System Data Format. Это тоже самое что использовать свойство DelimitedText, со свойством Delimiter равным ‘,’ и QuoteChar равным ‘"’. При присваивании значения этим свойствам они ведут себя одинаково. Например,
присваивается:

"Stri,ng 1", "Stri""ng 2" , String 3,String4
получится:
Stri,ng 1
Stri"ng 2
String
3
String4

   Под конец я расскажу наиболее примечательную возможность этого класса. Это возможность работы со списками типа имя-значение .
Например, есть список
First=12222
Second=4444
Third=3333

Тогда свойство STR.Names[2] возвратит ‘Second’. Свойство STR.Values[’Second’]
будет иметь значение ‘4444’. Ну как, смысл уловили? Символ разделителя задаёт свойство NameValueSeparator, можно использовать списки с любыми разделителями. Если в строке два разделителя, то именем является подстрока до первого разделителя. Также есть свойства ValueFromIndex, IndexOfName с ними я думаю, вы сами разберётесь.

   Вот и конец. Я думаю, что вы ощутили силу. Класс TStringList упрощает многие операции при работе со строками.

Автор статьи: rpy3uH . Полная версия тут: http://pblog.ru/?p=72 .

 
 
INDY IN DEPTH, ГЛУБИНЫ INDY
 
У посетителей "Клуба программистов" частенько возникают вопросы о том, как сделать почтовый клиент, или же ftp клиент. В ru нете достаточно мало материала по данной тематике, но даже если есть информация, то обычно она уже устаревшая. Анатолий Подгорецкий, автор этой книги, руководствуясь тем, что информации на русском языке совсем мало сделал перевод книги Chad Z. Hower (Kudzu).

Книга будет интересна для тех, кто интересуется хакингом, вирусописанием, а значит и для тех, кто занимается защитой сетей, программ, информации. Эта книга не только по Indy, она про Интернет, про протоколы, термины, методы работы, а к Indy относятся только примеры.

Исходники с примерами по работе с Indy компонентами вы всегда можете найти на официальном сайте http://www.Indyproject.org/ .

Исходники, с которыми я работаю, вы можете скачать
здесь же. Скачать исходники и сам учебник!
 
 
ИНТЕРЕСНЫЕ ТЕМЫ И ОБЖДЕНИЯ НА ФОРУМЕ ПРОГРАММИСТОВ
 
Работа с сетью

На форуме постоянно возникают элементарные вопросы о работе с сетью: как закачать файл, как подключиться и т.д. Темы эти лишь для новичка кажутся сложными, посмотрите исходники приложений сделанных на основе I ndy, и вы поймёте, как просто работать с сетью. Для сравнения можете посмотреть эту тему:

HTTP клиент в Delphi

Здесь ф орумчанин Мыхалыч показал пример работы с сетью без I ndy компонентов.

 
 
АНЕКДОТЫ ПРО ПРОГРАММИСТОВ
 
Знакомится программист с девушкой.
- Девушка, а какое у Вас имя?
- Лена.
- А ...РАСШИРЕНИЕ????

Встречаются два друга. Один спрашивает другого:
- Ты, я вижу, к Интернету подключился?
- Как ты узнал?
- По глазам.
- Стали умнее?
- Hет краснее...

Хакеру на день рождения дарят ружье.
- Зачем оно мне?! - удивляется он.
- Но ты же сам просил "Винчестер".

Пpезидент Клинтон, с целью yвеличить общий интеpес к наyкам и техническим новшествам, пpигласил несколько кpyпных компьютеpных компаний yчаствовать в кpyпном издательском Мyльтимедиа-пpоекте с общей темой "Слоны".
Hазвания частей пpоекта, сделанных соответственно компаниями:
Applе: "Дpyжественные к пользователям Слоны и их подpyга Мышь".
IВМ: "Как пpодать Слона томy, кто хочет кyпить Беговyю Лошадь".
Nоvеll: "Соединяя Слонов".
Воrlаnd: "Все Слоны должны стоить $99".
NеХТ: "Кpасим Слона в чеpный цвет".
Мiсrоsоft: "Почемy Вы должны кyпить Мiсrоsоft Windоws".

В магазин заходит молодой человек в униформе и с большой сумкой на плече:
- Здравствуйте! Я представитель канадской компьютерной фирмы. Предлагаю к дешевой летней распродаже по очень низким ценам: мать с камнем, память, винчестер, мышку и эргономическую клаву!
- Вали отсюда! Хотя нет... Пускай Клава после 18.00 заглянет!

Чем отличаются пользователи Windows от пользователей Unix?
Пользователи Unix сначала бьются тpи дня головой об стенку, а потом кайфуют.
Пользователи Windows пеpвые тpи дня кайфуют, а затем начинают биться головой об стенку.

Выставка "Комтэк-2001". Американцы проводят презентацию первого в мире суперкомпьютера, который может все! В охающую-ахающую толпу просачивается хмурый хакер Вася:
- И что же ты можешь, умник?
- Мальчик, я могу ВСЕ! Хочешь суп из черепахи? Вот он! Хочешь - прямо сейчас на Канары? В момент! Хочешь миллион баксов? Hет проблем! Хочешь Бритни Спирз в роскошной кровати? Тут же! Это революция! Это рассвет человечества! Это конец неравенству и эксплуатации! Это торжество демократии! Это вечное блаженство во славу великой Америки! Мальчик, ну скажи, что же ты хочешь?
- ОК, железяка, заметано... Я говорю - ты делаешь.
- Hу же! Hе томи! Говори! Сделаю тут же!
- Железяка... Format C:\ без бэкапа - время пошло!

- Это просто безнравственно - подыскивать спутницу жизни с помощью компьютера! - говорит отец сыну.
- А как ты познакомился с мамой?
- Нормально. Выиграл ее в покер.

Разговаривают два активных пользователя Интернета:
- Ну, как дела?
- Да, как тебе сказать... Все нормально вроде, вот только пальцы болят...
- А с чего это вдруг?
- Да, вчера с друзьями в чате встретился, так всю ночь песни орали...

Хочу разместить свой баннер на странице about:blank. Сколько это будет стоить и к кому обращаться?

- Правда ли, что если проиграть назад диск с Windows'NT, то можно услышать сатанинское послание?
- Это пустяки, вот, если проиграть его вперед, он установит Вам Windows'NT!

Электронная коммерция. Встречаются два друга:
- Ты как?
- Да ничего, магазин вот в сети открыл, за первый месяц заработал двадцать тысяч виртуальных долларов.
- Виртуальных? Я даже не видел таких!
- Я тоже.

Бухгалтер фирмы, занимающейся обналичкой, заносит данные в реестр сделок в Excel. Тянется к кнопочке Save, получает сообщение про "illegal operation", после чего Excel намертво отрубается.
- Блин, откуда они узнали, что операции нелегальные???

Идет соpевнование стpелков. Цель, попасть в яблоко на голове человека.
Выходит Робингyд, достает лyк, стpеляет и сбивает y яблока хвостик с листочком. Пyблика аплодиpyет.
- "I am a Robin Good !" - пpедставляется он.
Выходит ковбой Mальбpо, выхватывает пистолет и делает в яблоке дыpкy. Пyблика аплодиpyет емy.
- "I am a cowboy Marlboro !" - пpедставляется он и yходит.
Тpетим выходит Tyrok, достает свою плазменнyю пyшкy и выпyскает заpяд. Ба-бах! Яблоко pазлетается в клочья и голова человека тоже. Пyблика в yжасе.
- "I am..., I am..., I am sorry !" - говоpит Turok и гpyсный yходит с аpены.

 
 
ПИШИТЕ НАМ
 
Мы всегда рады вашим письмам. присылайте вопросы, пожелания, замечания. Адрес для писем ведущему рассылки admin@welikeit.ru .