Помогите расширить функцию - PullRequest
2 голосов
/ 31 октября 2010

Я нашел функцию, которая извлекает слово, которое находится между двумя другими словами, и это работает хорошо, но я хотел бы расширить функцию, чтобы она сканировала всю выбранную мной строку и извлекала ВСЕ слова, находящиеся между 2ключевые слова, а не только первый.Я предполагаю, что мне нужно будет добавить какой-то цикл, но я новичок в Delphi, поэтому я не знаю точно, что мне нужно делать, и я мог бы использовать некоторую помощь.

В любом случае, вот та функция, о которой я говорил.

<code>
function GetAWord(sentence, word1, word2 : string) : string;
  var
    n : integer;
  begin
  n := pos(word1, sentence);
  if n = 0 then begin
    result := '';
    exit;
  end;
  delete(sentence, 1, n + length(word1) - 1);
  n := pos(word2, sentence);
  if n = 0 then begin
    result := '';
    exit;
  end;
  result := copy(sentence, 1, n - 1);
  end; 

Спасибо, Эмили

1 Ответ

1 голос
/ 31 октября 2010

Вы можете добавить дополнительный аргумент к функции:

function GetAWord(sentence, word1, word2 : string; Index: Integer) : string;
var
  N: integer;

begin
  repeat
    N:= pos(word1, sentence);
    if N = 0 then begin
      result := '';
      exit;
    end;
    delete(sentence, 1, n + length(word1) - 1);
    n := pos(word2, sentence);
    if n = 0 then begin
      result := '';
      exit;
    end;
    Dec(Index);
    if Index < 0 then begin
      result := copy(sentence, 1, n - 1);
      Exit
    end;
    delete(sentence, 1, n + length(word2) - 1);
  until False;
end;


// test
procedure TForm1.Button1Click(Sender: TObject);
const
  S = '115552211666221177722';

begin
  ShowMessage(GetAWord(S, '11', '22', 0));
  ShowMessage(GetAWord(S, '11', '22', 1));
  ShowMessage(GetAWord(S, '11', '22', 2));
  ShowMessage(GetAWord(S, '11', '22', 4));
end;

Ну, вы можете найти все записи в одной функции:

procedure ParseSentence(sentence, word1, word2 : string; Strings: TStrings);
var
  N: integer;

begin
  Strings.Clear;
  repeat
    N:= pos(word1, sentence);
    if N = 0 then exit;
    delete(sentence, 1, n + length(word1) - 1);
    n := pos(word2, sentence);
    if n = 0 then exit;
    Strings.Add(copy(sentence, 1, n - 1));
    delete(sentence, 1, n + length(word2) - 1);
  until False;
end;

procedure TForm1.Button2Click(Sender: TObject);
const
  S = '115552211666221177722';

var
  SL: TStringList;

begin
  SL:= TStringList.Create;
  ParseSentence(S, '11', '22', SL);
  Memo1.Lines.Assign(SL);
  SL.Free;
end;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...