Autor Beitrag
Thomek
Hält's aus hier
Beiträge: 2



BeitragVerfasst: So 19.10.03 23:10 
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:
ausblenden 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:
ausblenden 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 user profile iconTino: Code- und Delphi-Tags hinzugefügt.
inselberg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 458



BeitragVerfasst: Mo 20.10.03 13:42 
ausblenden 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 ...
ausblenden 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 user profile iconTino: Code- durch Delphi-Tags ersetzt.

_________________
hans bist du das ?
Thomek Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 458



BeitragVerfasst: 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 ???
ausblenden Quelltext
1:
while ( pos('*',str) > 0 ) delete(pos('*',str),1)  ;					


so mal ausm kopf wenndu siehst was ich meine...

gn8

_________________
hans bist du das ?
Wolff68
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 302
Erhaltene Danke: 1

WinXP home
D6 Prof
BeitragVerfasst: 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:

ausblenden 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 // Hier kannst auch noch andere Zeichen reinsetzen
      // While, da bei IF nach dem Löschen das nächste Zeichen nicht geprüft wird
      Delete(s, i, 1); // Geht leider nicht direkt mit Memo1.Text daher die Variable S
    end;
  end;
  Memo1.Text := s;
end;

_________________
"Der Mensch ist nicht was er sich vorstellt oder wünscht zu sein, sondern das was andere in ihm sehen."