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 ?
Code: Alles auswählen
1234 5678 9012
111.111 222.222 333.333
Code: Alles auswählen
1234 5678 9012
111.111 222.222 333.333
Du kannst zum Trennen der einzelnen Werte eine Stringliste benutzen und den entsprechenden Delemiter setzen und den Ausgangsstring der Property Text zuweisen.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 ?
Code: Alles auswählen
procedure TForm1.Button1Click(Sender: TObject);
const
s = '123 456 678 901';
var
sl: TStringList;
begin
sl := TStringList.Create;
sl.Text := s;
sl.Delimiter := ' ';
ShowMessage(IntToStr(sl.Count));
ShowMessage(sl[0]);
sl.Free;
end;
Code: Alles auswählen
sl.Delimiter := ' ';
sl.DelimitedText := s;
Code: Alles auswählen
procedure TForm1.Button1Click(Sender: TObject);
const
s = '123 456 678 901';
var
sl: TStringList;
begin
sl := TStringList.Create;
sl.Delimiter := ' ';
sl.DelimitedText := s;
ShowMessage(IntToStr(sl.Count));
ShowMessage(sl[0]);
sl.Free;
end;
Code: Alles auswählen
var s : string;
i,j,k : integer;
ri,rj,rk : real;
begin
s:='1234 5678 9012';
readstr(s,i,j,k);
writeln(i,'-',j,'-',k);
s:='111.111 222.222 333.333'; rk:=10;
readstr(s,ri,rj,rk);
writeln(ri:7:3,'-',rj:7:3,'-',rk:7:3);
end.
Nein, das muss man sowieso nicht. Das Ganze ist eine einfache Fingerübung, die man auch mit ganz wenig nachdenken lösen kann.Mathias hat geschrieben: Oder muss ich mühsam mit Pos und Copy den String zerlegen,
Code: Alles auswählen
var
s, buf: string;
i: integer;
begin
s := '111.111 222.222 333.333';
buf := '';
for i := 1 to length(s) do
if (s[i] = ' ') then
begin
ShowMessage(buf);
buf := '';
end else buf := buf + s[i];
if buf <> '' then ShowMessage(buf);
end;
Code: Alles auswählen
uses ..., StrUtils;
...
var
s, buf: string;
i: integer;
begin
s := '111.111 222.222 333.333';
for i := 1 to Length(s) do
begin
buf := ExtractWord(i, s, [' ']);
if Length(buf) > 0 then
ShowMessage(buf)
else
Break;
end;
end;
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
Du verwendest aber eine vorgefertigte Funktion. Das zählt nicht.Michl hat geschrieben:...ein Codecontest - ich bin dabei
![]()
theo hat geschrieben:Du verwendest aber eine vorgefertigte Funktion. Das zählt nicht.
Code: Alles auswählen
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) > 0 then
ShowMessage(buf);
if i > Length(s) then Exit;
ExtractRecursive(Copy(s, i + 1, Length(s)));
end;
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
Meinetwegen. Eine Variante mit PChar wäre auch schön.Michl hat geschrieben:theo hat geschrieben:Du verwendest aber eine vorgefertigte Funktion. Das zählt nicht.Das wusste ich nicht. Bin ich nun disqualifiziert oder habe ich noch einen Versuch?
Code: Alles auswählen
function getInt(ins: ansistring): TIntArray;
var
i: integer;
sl: TStringList;
begin
sl := TStringList.Create;
sl.Delimiter := ' ';
sl.DelimitedText := ins;
SetLength(Result, sl.Count);
for i := 0 to sl.Count - 1 do begin
Result[i] := StrToInt(sl[i]);
end;
sl.Free;
end;
Mathias hat geschrieben: Soviel ich wies, ist buf := buf + s sher Rechenintensiv.
Ich mische mal ein mit ganz anderen Argumenten. Warum Prozeduren im Alltag benutzen wie TStringList.Create.Mathias hat geschrieben:Gibt es eine fertige Funktion, welche Zahlen aus einem String auslesen kann ?
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 ?
Bei dem Beispiel oben, hat es in der 1. Zeile 3 Integer und in der zweiten Zeile 3 Single.Code: Alles auswählen
1234 5678 9012 111.111 222.222 333.333