Mathias hat geschrieben:Oder muss ich mühsam mit Pos und Copy den String zerlegen, bevor ich die Zahlen mit Val/StrToInt/StToFloat in einen Integer/Single konvertieren kann ?
Du kannst zum Trennen der einzelnen Werte eine Stringliste benutzen und den entsprechenden Delemiter setzen und den Ausgangsstring der Property Text zuweisen. Danach hast Du alle "Zahlen-Strings" einzeln und kannst sie bequem durchlaufen und in den gewünschten Typ umwandeln.
Habe folgenden Test probiert, aber bei Count kommt 1, und sl[0] beinhaltet den ganzen String. Muss ich noch etwas aufrufen, das sl die Strings trennt ?
Dies ist sicher eine gute Variante, nur ist bei mir die Anzahl der Zahlen im String unbekannt, und es kann auch eine "0" im String sein, somit eignet sich im meinem Fall die Lösung mit TStringList besser.
Trotzdem Danke!
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
var s, buf:string; i: integer; begin s :='111.111 222.222 333.333'; buf :=''; for i :=1to length(s)do if(s[i]=' ')then begin ShowMessage(buf); buf :=''; endelse buf := buf + s[i]; if buf <> ''then ShowMessage(buf); end;
Wegen jedem Mückenschiss eine fertige Funktion zu suchen, kann ganz schön anstrengend sein. Deshalb kann man ruhig auch mal etwas selber machen. Die Lösung mit der StringList ist allerdings schon gut.
uses ..., StrUtils; ... var s, buf:string; i: integer; begin s :='111.111 222.222 333.333'; for i :=1to Length(s)do begin buf := ExtractWord(i, s,[' ']); if Length(buf) > 0then ShowMessage(buf) else Break; end; end;
procedure TForm1.Button1Click(Sender: TObject); begin ExtractRecursive('111.111 222.222 333.333'); end;
procedure TForm1.ExtractRecursive(const s:String); var buf:string; i: Integer; begin i :=1; buf :=''; while(i <= Length(s))and(s[i] <> ' ')do begin buf := buf + s[i]; inc(i); end; if Length(buf) > 0then ShowMessage(buf); if i > Length(s)thenExit; ExtractRecursive(Copy(s, i +1, Length(s))); end;
Bei dem Beispiel oben, hat es in der 1. Zeile 3 Integer und in der zweiten Zeile 3 Single.
Ich mische mal ein mit ganz anderen Argumenten. Warum Prozeduren im Alltag benutzen wie TStringList.Create.
Wenn man im Alltag zb mit Texten und Zahlen und Konvertierung zu tun hat dann schreibt man doch mit einfachen Pascal Prozeduren sich selbst die Tools mit zb ord(ch) zum Integerwert. Erstens kenne ich dann die Befehle und kann besser absichern mit Abfragen als ein fremdes Tool.