скрыть

скрыть

  Форум  

Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Google  
 

Простое использование TParser



Автор: Mike Scott

...можно ли с помощью TParser "вытащить" из строки целочисленные значения, разделенные между собой пробелом, например, из строки '345 998 223 546 777' получить пять чисел?

Как этот пример? Он парсирует текст из поле редактирования с именем Edit1 и помещает полученные числа с список с именем Listbox1:


procedure TForm1.Button1Click(Sender: TObject);
var
  Stream: TStream;
  s: string;
begin
  Stream := TMemoryStream.Create;
  try
    { получаем текст области редактирования и помещаем его в поток }
    s := Edit1.Text;
    Stream.WriteBuffer(s[1], length(s));
    { сбрасываем стартовую позицию потока и создаем парсер }
    Stream.Position := 0;
    with TParser.Create(Stream) do
    try
      { "добываем" числа и добавляем их в список }
      while Token <> toEOF do
      begin
        CheckToken(toInteger); { возбуждаем исключение, если не toInteger }
        Listbox1.Items.Add(IntToStr(TokenInt));
        NextToken;
      end;
    finally
      Free;
    end;
  finally
    Stream.Free;
  end;
end;

Как вы можете видеть, бОльшая часть кода тривиальна: работа с потоком, его создание и освобождение, и парсер, естественно, с обработкой ошибок<g>. CheckToken проверяет, является ли текущий признак ожидаемым, и, если нет, генерирует исключительную ситуацию. В нашем случае мы ищем целые (toInteger), и читаем их из TParser.TokenInt. Просто!






Copyright © 2004-2016 "Delphi Sources". Delphi World FAQ




Группа ВКонтакте   Ссылка на Twitter   Группа на Facebook