Показать сообщение отдельно
  #4  
Старый 18.03.2022, 17:33
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,097
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

По поводу "на одном ищет, на другом нет".
Для начала, второй код в принципе не рабочий, т.к. ты при нахождении текста очищаешь КомбоБокс, соответсвенно все, что ты нашел до этого, удаляется.
Второе. В принципе, такого быть не должно. Но если происходит, тут я бы посмотрел на версию Винды и настройки русского языка. Были случаи на ХР, когда настройки вставали криво, но в этом случае просто отображались кракозябры, а вот сбоев в рвботе особо не наблюдалось.

Теперь по сути.
Упростим ситуацию.
Пусть у нас токен "Раздел ###" всегда находится в начале новой строки и всегда имеет формат как поквзвно, а вслед за токеном после цифр всегда идет не цифра. Поиск делаем регистро зависимым (т.е. "Раздел" и "РАЗДЕЛ" это разные токены).
Тогда делаем примерно так;
Код:
var
  I : Integer;
  S : String;
begin
  ComboBox1.Items,Clear;
  For I := 0 To Memo1.Lines.Count-1 Do
    If IsSection(Memo1.Lines[i],S) Then
      ComboBox1.Items.Add(S);
end;

function IsSection(sIn : String; var sOut : String) : Boolean;
const
  token : String = 'Раздел ';
var
  I : Integer;
begin
  Result := False;
  If (Pos(token, sIn) = 1) And (Length(sIn) >= Length(token + 1)) Then
    Begin
      sOut := token;
      I := Length(token) + 1;
      While (I <= Length(sIn)) And (sIn[i] in ['0'..'9']) Do
        Begin
          sOut := sOut + sIn[i];
          Inc(I);
        End;
      Result := sOut <> token; // если цифры не нашли, то не добаляем.
    End;
end;

ЗЫ. Не проверял, но должно работать.
Ответить с цитированием