Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Strings subtrahieren?


Florens - Mo 01.11.10 21:16
Titel: Strings subtrahieren?
Hi all,
Ich schätz mal ein paar haben gestern mein RSA projekt schon kennengelernt. Jetzt gehts aber nciht mehr ums chiffrieren sondern dechiffrieren. Dazu will ich Zahlen einlesen die ja aber unterschiedlich lange Strings sein können. Vorerst sieht mein Quellcode wie folgt aus:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
procedure TForm1.ZahlenzuBuchstabenClick(Sender: TObject);

var a,x,i,st:Integer;
S: String;

begin
x:=length(Zahl.Text);

for i:=1 to x do begin
S:=S+Zahl.Text[i];  

if Zahl.Text[i]=' ' then begin
S:=S-Zahl.Text[i];                   //hier liegt mein Problem...S:=S-' '; hat auch nicht gewirkt :(. 
st:=StrToInt(S);
Buch.Text:=Buch.Text+ chr(st)+' ';
S:='';
end

end

end;


Die Zahlen gibt er in meinem Kontrollmemo immer mit einem Leerzeichen aus. So habe ich mir gedacht subtrahier ich dieses einfach weg nur wie....

Danke um jede hilfe
Euer Flo


jaenicke - Mo 01.11.10 21:22

Schau dir mal Delete an. ;-)


Florens - Mo 01.11.10 21:24

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Schau dir mal Delete an. ;-)

? Danke für die Antowort nur wie bringe ich delete hier rein. Habe bisher nicht viel mit Strings rumprobiert...


jaenicke - Mo 01.11.10 21:26

http://lmgtfy.com/?q=delphi+delete :roll:


Florens - Mo 01.11.10 21:35

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
http://lmgtfy.com/?q=delphi+delete :roll:

Sooo jetzt bin ich schonmal soweit(sry für meine Googlefaulheit finds nur immer besser verständlich wenn mir das jemand erklärt der das vorrangehende Problem kennt):

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
procedure TForm1.ZahlenzuBuchstabenClick(Sender: TObject);

var a,x,i,st:Integer;
S: String;

begin
x:=length(Zahl.Text);

for i:=1 to x do begin
S:=S+Zahl.Text[i];  

if Zahl.Text[i]=' ' then begin
a:=length(S);
Delete(S,a);                   //Delphi sagt mir jetzt, das nicht genug Parameter gewählt wurden. Ich versteh nicht wozu der mittlere da ist... 
st:=StrToInt(S);
Buch.Text:=Buch.Text+ chr(st)+' ';
S:='';
end

end

end;


jaenicke - Mo 01.11.10 21:42

Gleich der erste Link führt doch zu einer Beschreibung. Und da stehen drei Parameter. Da du nur zwei angegeben hast, ist es irgendwie logisch, dass Delphi sagt, dass da einer fehlt, oder?

Außerdem zeigt das dir Delphi doch auch selbst an...

delete

Da siehst du drei Parameter.


Florens - Mo 01.11.10 21:46

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Gleich der erste Link führt doch zu einer Beschreibung. Und da stehen drei Parameter. Da du nur zwei angegeben hast, ist es irgendwie logisch, dass Delphi sagt, dass da einer fehlt, oder?

Außerdem zeigt das dir Delphi doch auch selbst an...

Da siehst du drei Parameter.


Ja ich meinte ja auch, dass ich den mittleren Parameter nicht verstehe und deswegen gehofft hatte, dass es mit 2en auch geht, was es aber offensichtlich nicht tut. Selbst auf dem Bild check ich nicht was mit Index gemeint ist. (Btw: ich hab den ersten Link angeklickt und da stand dann delete(string,5,maxInt). WIeso zur Hölle 5?)

Edit: Habs jetzt auch mit delete(S,a-1,a) probiert womit der aber gleich die letzten beiden Zeilen löscht...


jaenicke - Mo 01.11.10 21:57

user profile iconFlorens hat folgendes geschrieben Zum zitierten Posting springen:
Edit: Habs jetzt auch mit delete(S,a-1,a) probiert womit der aber gleich die letzten beiden Zeilen löscht...

Quelltext
1:
2:
3:
4:
5:
         abcdefghijkl
Length:             ^

         abcdefghijkl
Length - 1:        ^
Und da du ab dieser Position a Zeichen löschst, sind dann die letzten beiden Zeichen weg. (Dass a zu hoch ist für die Länge des zu löschenden Bereichs, ist egal.)


Florens - Mo 01.11.10 21:57

close pls. klappt so jetzt wunderbar:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
procedure TForm1.ZahlenzuBuchstabenClick(Sender: TObject);

var a,x,i,st:Integer;
S: String;

begin
x:=length(Zahl.Text);
Memo1.Lines.Add('length='+IntToStr(x));

for i:=1 to x do begin
S:=S+Zahl.Text[i];

if Zahl.Text[i]=' ' then begin
a:=length(S);
Delete(S,a,a);
Memo1.Lines.Add('S='+S);
st:=StrToInt(S);
Memo1.Lines.Add('st='+IntToStr(st));
Buch.Text:=Buch.Text + chr(st);
S:='';
end

end

end;


jaenicke - Mo 01.11.10 21:59

Hier werden Threads nicht einfach geschlossen, nur weil sie gelöst sind. ;-)

Und nebenbei:

Delphi-Quelltext
1:
Delete(S, a, 1);                    
Das genügt auch. Schließlich willst du ja ein Zeichen ab Position a löschen. ;-)