W kodzie Dragona jest błędna nazwa zmiennej. Ale i tak mi to zwraca po poprawce inne teksty, niż chce - nasz czciciel "logiki z pupki". Ja bym to zrobił na szybko tak, jak poniżej. Może mniej optymalnie, ale do mnie bardziej przemawia, bo wiem co się dzieje. Oczywiście sposobów żeby to zrobić, jest na pewno więcej. W sumie to @Bruno(M) jako doświadczony forumowicz powinieneś do bólu kombinować najpierw samodzielnie, o czym już pisałem tutaj nie raz. I dopiero kiedy byś wyczerpał wszystkie możliwości samodzielnego rozwiązania problemu, pisać na forum.
function BrunomLogicFromAss(AInput : string) : string;
const
Data_Separator = '|';
var
I, X : integer;
BeforeSepStr, AfterSepStr, ResPosStr : string;
begin
Result := AInput;
X := Pos(Data_Separator, AInput);
if X > 0 then
begin
ResPosStr := '';
BeforeSepStr := Copy(AInput, 1, X - 1);
AfterSepStr := Copy(AInput, X, MaxInt);
BeforeSepStr := StringReplace(BeforeSepStr, #32, '', [rfReplaceAll]);
for I := 1 to Length(AfterSepStr) do
begin
if AfterSepStr[I] in ['a'..'z', 'A'..'Z'] then
begin
X := Pos(AfterSepStr[I], BeforeSepStr);
if X > 0 then
begin
ResPosStr := ResPosStr + Format(' %d', [X]);
end;
end;
end;
if ResPosStr <> '' then
begin
Result := Format('%s = %s', [AInput, ResPosStr]);
end;
end;
end;
procedure TForm1.Button1Click(Sender : TObject);
var
I : integer;
begin
for I := 0 to ListBox1.Items.Count - 1 do
begin
ListBox1.Items[I] := BrunomLogicFromAss(ListBox1.Items[I]);
end;
end;
Oczywiście rozwiązanie dla pojedynczych i unikalnych znaków. Ale tak sugeruje nam przykład z pierwszego posta :/