По поводу "на одном ищет, на другом нет".
Для начала, второй код в принципе не рабочий, т.к. ты при нахождении текста очищаешь КомбоБокс, соответсвенно все, что ты нашел до этого, удаляется.
Второе. В принципе, такого быть не должно. Но если происходит, тут я бы посмотрел на версию Винды и настройки русского языка. Были случаи на ХР, когда настройки вставали криво, но в этом случае просто отображались кракозябры, а вот сбоев в рвботе особо не наблюдалось.
Теперь по сути.
Упростим ситуацию.
Пусть у нас токен "Раздел ###" всегда находится в начале новой строки и всегда имеет формат как поквзвно, а вслед за токеном после цифр всегда идет не цифра. Поиск делаем регистро зависимым (т.е. "Раздел" и "РАЗДЕЛ" это разные токены).
Тогда делаем примерно так;
Код:
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;
ЗЫ. Не проверял, но должно работать.