Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi split, aber wie ? (https://www.delphipraxis.net/74669-split-aber-wie.html)

theNick 7. Aug 2006 14:15


split, aber wie ?
 
hallo,
ich hab da ein kleineres Problem, hab schon versucht nach anderen Beiträgen zu suchen, zwar auch einige gefunden aber irgendwie steige ich da nicht so ganz durch :)
Also:
Ich habe ein Edit-Feld und ein record, aus dem record werden daten (int & word) in das edit feld eingegeben:
Delphi-Quellcode:
LabeledEditklasse.Text := IntToStr(Schuelerfeld[i].stufe) + ' ' + Schuelerfeld[i].klasse;
sooo...nun das eigentliche Problem,
ich würde gerne, dass er die im edit-feld geänderten daten nun auch wieder in das record abspeichert.
Ich dachte mir das geht mit einem split befehl, ich weiß nur nicht wie.
Ich glaube am besten wäre es wenn der split befehl nicht nach lehrzeichen, sondern nach einer zahl btw. vor dem Buchstaben trennt, so wird z.B. "13a" auch erkannt und nicht nur "13 a".

kann mir einer helfen ?
vielen dank schon mal im vorraus :D

Klaus01 7. Aug 2006 14:23

Re: split, aber wie ?
 
Hallo,

ich stelle mit das ungefähr so vor:
Delphi-Quellcode:
i:=1
found :=false;
s:=LabeledEditklasse.Text;
while (not found) and (i < length(s)) do
  begin
    if s[i] not in ['0'..'9'] then
      begin
        found:=true;
        Schuelerfeld[i].stufe := StrToInt(copy(s,1,i-1));
        Schuelerfeld[i].klasse := copy(s,i,length(s)-i);
      end
    else
      inc(i);
  end;
Grüße
Klaus

marabu 7. Aug 2006 14:26

Re: split, aber wie ?
 
Hier noch ein anderer Ansatz:

Delphi-Quellcode:
procedure TDemoForm.ButtonClick(Sender: TObject);
var
  s: String;
  index, value: Integer;
begin
  s := '13a';
  Val(s, value, index);
  s := Trim(Copy(s, index, MaxInt));
  ShowMessage(Format('Klasse %d %s', [value, s]));
end;
Grüße vom marabu

theNick 7. Aug 2006 16:15

Re: split, aber wie ?
 
Zitat:

Zitat von Klaus01
Hallo,

ich stelle mit das ungefähr so vor:
Delphi-Quellcode:
i:= 1
found :=false;
s:=LabeledEditklasse.Text;
while (not found) and (i < length(s)) do
  begin
    if s[i] not in ['0'..'9'] then
      begin
        found:=true;
        Schuelerfeld[i].stufe := StrToInt(copy(s,1,i-1));
        Schuelerfeld[i].klasse := copy(s,i,length(s)-i);
      end
    else
      inc(i);
  end;
Grüße
Klaus

hab das gerade mal ausprobiert,
delphi versteht die zeile
Delphi-Quellcode:
if s[i] not in ['0'..'9'] then
nicht, und um ehrlich zu sein ich auch nicht :)
schreiben wir das mal aus ...
Delphi-Quellcode:
if LabeledEditklasse.Text[1] [...]
<- geht das ?

------------------------------

Zitat:

procedure TDemoForm.ButtonClick(Sender: TObject);
var
s: String;
index, value: Integer;
begin
s := '13a';
Val(s, value, index);
s := Trim(Copy(s, index, MaxInt));
ShowMessage(Format('Klasse %d %s', [value, s]));
end;
hab ich auch gerade getestet, sieht schon ganz gut aus, aber wie kann ich %d und %s einzeln abrufen ?
Delphi-Quellcode:
  Val(s, value, index);
  s := Trim(Copy(s, index, MaxInt));
  LabeledEditnachname.Text := (Format('%d', [value, s]));
  LabeledEditvorname.Text := (Format('%s', [value, s]));
so hab ichs erstmal versucht, das %d funktioniert, aber bei %s schmeißt der mir nen error

Klaus01 7. Aug 2006 16:34

Re: split, aber wie ?
 
da der Code vom Marabu der bessere ist:

Delphi-Quellcode:
Val(s, value, index);
s := Trim(Copy(s, index, MaxInt));
Schuelerfeld[i].stufe := value;
Schuelerfeld[i].klasse := s;
zum besseren Verständnis:

ShowMessage(Format('Klasse %d %s', [value, s]));

%d korrespondiert mit value und stellt einen Dezimalwert dar
%s korrespondiert mit s und stellt einen String dar.
%d und %s sind keine Variablen, sondern stellen einen Platzhalter
in der Formatanweisung dar.

und
Delphi-Quellcode:
if LabeledEditklasse.Text[1] [...]
sollte auch gehen.

Grüße
Klaus

theNick 7. Aug 2006 16:46

Re: split, aber wie ?
 
super, wunderbar :)
funktioniert genau so wie ich es mir vorgestellt habe :D
vielen dank euch beiden :D


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:09 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz