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

Паскалевский эквивалент StrTok

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

Паскалевский эквивалент StrTok

Автор: Mike Scott


function NextToken( P : PChar ; Divider : PChar ) : PChar ;
const
  next : PChar = nil ;
begin
  if P = nil then
    P := next ;
  if P <> nil then
  begin
    next := StrPos( P, Divider ) ;
    if next <> nil then
    begin
      next^ := #0 ;
      next := @next[ StrLen( Divider ) ] ;
    end ;
  end ;
  NextToken := P ;
end ;

Here's the translation of the text into Russian:

Это реализация функции StrTok на языке Delphi, которая разбивает строку на токены, разделенные заданным символом-разделителем. Автор - Майк Скотт.

Код определяет функцию NextToken, которая принимает два параметра: P, указатель на строку символов (типа PChar), и Divider, указатель на символ-разделитель (также типа PChar). Функция возвращает указатель на следующий токен в строке, или nil, если больше нет токенов.

Вот шаг за шагом, что код делает:

  1. Если P равно nil, то он устанавливает P в внутреннюю переменную next. Это позволяет функции работать рекурсивно, как мы увидим позже.
  2. Если P не равно nil, то он находит позицию символа-разделителя в строке с помощью StrPos.
  3. Если символ-разделитель найден, то он устанавливает символ на этой позиции в null-символ (#0) для обозначения конца токена. Затем он перемещает указатель next на позицию после символа-разделителя, эффективно пропуская символ-разделитель и готовясь к следующей итерации.
  4. Функция возвращает значение P, которое теперь указывает на следующий токен в строке.

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

Вот пример использования этой функции:

var
  s: string;
begin
  s := 'hello,world!';
  PChar(s) := ' ';
  while NextToken(PChar(s), ' ') <> nil do
  begin
    writeln(NextToken(PChar(s), ' '));
    NextToken(PChar(s), ' '); // перемещаемся к следующему токену
  end;
end.

Этот код выведет токены "hello", "world!", а затем остановится, потому что больше нет токенов.

В качестве альтернативы можно использовать функцию Split из модуля System.SysUtils в Delphi:

var
  s: string;
begin
  s := 'hello,world!';
  writeln(s.Split(['',']))); // выведет ['hello', 'world!']
end.

Это более компактный и эффективный способ разбить строку на токены, но может не быть совместимым с более старыми версиями Delphi или другими Паскальскими компиляторами.

Функция NextToken реализует Паскалевский эквивалент функции StrTok, позволяя разделить строку на токены с помощью указанного делителя.


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

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




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


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


реклама


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

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 11:56:18/0.0054910182952881/1