Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Парсинг строк

Delphi , Синтаксис , Текст и Строки

 
Code:
unit splitfns;
interface
uses Classes, Sysutils;
function GetNextToken(Const S: string; Separator: TSysCharSet; var StartPos: integer): String;
 
{Returns the next token (substring) from string S, starting at index StartPos and ending 1 character
before the next occurrence of Separator (or at the end of S, whichever comes first).}
 
{StartPos returns the starting position for the next token, 1 more than the position in S of
the end of this token}
 
procedure Split(const S: String; Separator: TSysCharSet; MyStringList: TStringList);
 
{Splits a string containing designated separators into tokens and adds them to MyStringList NOTE: MyStringList must be Created before being passed to this procedure and Freed after use}
 
function AddToken (const aToken, S: String; Separator: Char; StringLimit: integer): String;
 
{Used to join 2 strings with a separator character between them and can be used in a Join function}
{The StringLimit parameter prevents the length of the Result String from exceeding a preset maximum}
 
implementation
 
function GetNextToken(Const S: string; Separator: TSysCharSet; var StartPos: integer): String;
var Index: integer;
begin
  Result := '';
{Step over repeated separators}
 While (S[StartPos] in Separator) and (StartPos <= length(S)) do StartPos := StartPos + 1;
 
 if StartPos > length(S) then Exit;
 
{Set Index to StartPos}
 Index := StartPos;
 
{Find the next Separator}
 While not (S[Index] in Separator) and (Index <= length(S))do Index := Index + 1;
 
{Copy the token to the Result}
  Result := Copy(S, StartPos, Index - StartPos);
 
{SetStartPos to next Character after the Separator}
  StartPos := Index + 1;
end;
 
procedure Split(const S: String; Separator: TSysCharSet; MyStringList: TStringList);
var Start: integer;
begin
  Start := 1;
 While Start <= Length(S) do MyStringList.Add(GetNextToken(S, Separator, Start));
end;
 
function AddToken (const aToken, S: String; Separator: Char; StringLimit: integer): String;
begin
 if Length(aToken) + Length(S) < StringLimit then
    begin
      {Add a separator unless the Result string is empty}
      if S = '' then Result := '' else Result := S + Separator;
 
      {Add the token}
      Result := Result + aToken;
    end
 else
 {if the StringLimit would be
  exceeded, raise an exception}
    Raise Exception.Create('Cannot add token');
end;
end.
 
 
пример использования:
 
Code:
...
data:= TStringList.Create;
splited:=TStringList.Create;
data.LoadFromFile(s);
Split(data.Text,[',',' ',#10,#13,';','\"','.','!','-','+','*','/','\',
'(',')','[',']','{','}','<','>','''','"','?','"','#',#0],splited);
for i:= 0 to splited.Count-1 do
begin
    if not words.Find(splited.Strings,adr) then
       words.Add(splited.Strings[i]);
    application.processmessages;[i]//make program to respond to user
       //commands while processing in case of very long string.
end;
...
Автор: Song
Взято из http://forum.sources.ru

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

Рассмотрим код:

GetNextToken() функция

Эта функция принимает строку S, множество разделителей Separator и целое число StartPos в качестве входных параметров. Она возвращает следующий токен (подстроку) из строки S, начиная с индекса StartPos и заканчивая 1 символом до следующего вхождения разделителя.

Функция выполняет следующие действия:

  1. Переходит через повторные разделители, увеличивая StartPos, пока не достигнет символа, который не находится в множестве разделителей.
  2. Найдет следующий разделитель, поисковый вперед от текущей позиции до тех пор, пока не найдет символ, который находится в множестве разделителей или не дойдет до конца строки.
  3. Копирует токен в результатную строку с помощью функции Copy().
  4. Устанавливает StartPos в позицию после разделителя.

Split() процедура

Эта процедура принимает строку S, множество разделителей Separator и объект TStringList MyStringList в качестве входных параметров. Она разбивает строку на токены с помощью разделителей и добавляет их в MyStringList.

Процедура выполняет следующие действия:

  1. Инициализирует StartPos равным 1.
  2. Проводит цикл, пока StartPos не будет больше длины строки.
  3. Вызывает функцию GetNextToken() для получения следующего токена из строки, начиная с текущей позиции и добавляет его в MyStringList.

AddToken() функция

Эта функция принимает две строки aToken и S, символ разделителя Separator и целое число StringLimit в качестве входных параметров. Она возвращает новую строку, которая является конкатенацией aToken и S с разделителем между ними, но только если длина полученной строки не превышает указанного StringLimit.

Если длина полученной строки будет превышать лимит, она выбрасывает исключение.

Пример использования

Примерный код демонстрирует использование этих функций для разбиения строки, загруженной из файла, на токены с помощью различных разделителей и добавления их в объект TStringList. Затем он проходит по списку токенов и добавляет их в другой список, если они не уже есть.

В целом, этот модуль предоставляет набор полезных функций для разбиения строк в программировании на языке Pascal.

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


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Текст и Строки ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-01-29 02:26:12/0.0036139488220215/0