Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Memo Delete
Thomek - So 19.10.03 23:10
Titel: Memo Delete
Hiho erstmal ;)
Ich bin niegelnagel neu im Programmgeschäft und habe mich für Delphi entschieden! Ich hoffe das richtige getroffen zu haben. Auch das richtige Forum hier :) und richtige Abteilung.
Also zu meinem Problem:
Ich habe mich entschlossen erstmal ein Programm zu schreiben, wo man in ein "memo" einen text kopiert und er da bestimmte zahlen rausnimmt und dann daen durchschnitt ausrechnet.
Folgendes wird in das Memo Feld eingegeben:
Quelltext
1: 2: 3: 4:
| 1 219 : 1 Bautram 430 3.336 15.015.415 2 219 : 2 DZVO * 348 3.043 16.103.996 3 219 : 3 Lancelot3009 898 470 27.026.697 ... bis 48 |
Ich habe im Quakenet nach gefragt und mir wurde gesagt ich soll das per Delete machen. Nun habe ich folgendes:
Delphi-Quelltext
1: 2: 3:
| test:=memo1.Lines[0]; Delete(test,pos(test,' '),length(test)); showmessage(test); |
Also das er erstmal aus dem Memo Zeile 1 alles bis zum ersten Leerzeichen wegnimmt ( so sollte es sein ) leider geht das net. Und das ist auch mein Problem, wollte das dann so oft repeaten, bis er bei der letzten Zahl ist.
Eine andere Fragen:
1. Man sieht oben bei den Sachen die man eingibt ist manchmal hinter dem Text (dem Nickname) ein * das ist aber auch net bei jedem. Gibt es ne Funktion oder eine Möglichkeit um erstmal alle * rauszufiltern? Und vielleicht alle Punkte ".", da diese nachher ja beim Rechnen nerven.
Danke schonmal für die Hilfe!
Thomek
Moderiert von
Tino: Code- und Delphi-Tags hinzugefügt.
inselberg - Mo 20.10.03 13:42
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| function extractnumber(str:string;position:byte):real; var sub : string; ctrl: integer; r : real; begin r:=0; while ( pos(' ',str) > 0 ) And (position > 0 ) do begin sub:=copy(str,1,pos(' ',str)-1); val(sub,r,ctrl); if ctrl = 0 then dec(position); str:=copy(str,pos(' ',str)+1,length(str)); end; result:=r; end; |
müsste eigentl selbsterklärend sein ... es ist en einfache zerlegung deiner zeichenkette ...
Delphi-Quelltext
1:
| extractnumber(memo1.Lines[0],5) |
liefert zb 3.336
das durchschnittberechnen müsstest du jez auch ohne hilfe hinbekommen oder ;) ?
Moderiert von
Tino: Code- durch Delphi-Tags ersetzt.
Thomek - Mo 20.10.03 21:43
Ist ja geil :) Jo das stimmt. Aber extractnumber(test.Lines[0],6) gibt 15015 aus und nicht 15.015.415 ;)
Und wie mach ich das mit den * Filtern?
Danke!!!!
Thomek
inselberg - Di 21.10.03 01:55
ist 15.015.415 denn auch ne zahl ;) oder möchtest du dies als 3 zahlen behandeln ?
den sinn des * hab ich auch nicht verstanden ,,, möchtest du das einfach löschen ???
Quelltext
1:
| while ( pos('*',str) > 0 ) delete(pos('*',str),1) ; |
so mal ausm kopf wenndu siehst was ich meine...
gn8
Wolff68 - So 26.10.03 17:44
Für das Ausfiltern der * könnte
StringReplace(Memo1.Text,'*','', [rfReplaceAll]) dienlich sein.
(Und das gleiche eben nochmal für die Punkte)
Wenn Du mehrere, einzelne Zeichen ausfiltern willst würde ich es allerdings eher so machen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TForm1.Button2Click(Sender: TObject); var i : Integer; s : String; begin s := Memo1.Text; For i := 1 to Length(s)-1 do begin While s[i] IN ['*','.'] do begin Delete(s, i, 1); end; end; Memo1.Text := s; end; |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!