Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Strings Zerlegen zum 1000 mal^^ (https://www.delphipraxis.net/45504-strings-zerlegen-zum-1000-mal%5E%5E.html)

DP-Maintenance 7. Mai 2005 19:07

DP-Maintenance
 
Dieses Thema wurde von "Sharky" von "Programmieren allgemein" nach "Object-Pascal / Delphi-Language" verschoben.
Es geht doch um Delphi. Warum dann nich auch in eine Delphi-Sparte? ;-)

JasonDX 7. Mai 2005 19:37

Re: Strings Zerlegen zum 1000 mal^^
 
ich hab mir die anderen Codes nicht angeschaut, aber relativ kurz geht das so:
Delphi-Quellcode:
var zeile, who: string;
    money, Factor, i: integer;
begin
  Zeile := Edit1.Text;
  delete(zeile, 1, pos(': ', Zeile) + 1);
  who := copy(zeile, 1, pos(' ', Zeile) - 1);
  delete(zeile, 1, pos(' ', Zeile));
  case zeile[1] of
    'n': Factor := -1; //nimmt sich
    'l': Factor := 1; //legt hinein
    'b': Factor := 0; //beseitigt
  end;
  for i := 0 to ord(Factor < 0) do
    delete(Zeile, 1, pos(' ', Zeile));
  TryStrToInt(copy(Zeile, 1, pos(' ', Zeile) - 1), money);
  money := money * Factor;
in who steht dann wer, und in money wieviel, also positiv wenn was reingelegt, und negativ wenn was rausgenommen

doom98 7. Mai 2005 20:39

Re: Strings Zerlegen zum 1000 mal^^
 
Äh hi

ich will ja nicht stören aber ich hab auch ein String Problem*g

Inhalt: String;

Inhalt ist ein String der genau zwei unterschiedliche Wörter in sich trägt wobei das erste bekannt ist (zb high) aber das zweite immer anderst ist.
Aber ich muss jetzt irgendwie aus dem Inhalt String das zweite Wort wieder in einen eigenen String packen.

Wie bekomme ich das hin?

Inhalt zb = 'high XXX'

string2:= 'XXX' // also string2 soll dann xxx in sich haben.

Mfg
Doomy

JasonDX 7. Mai 2005 20:45

Re: Strings Zerlegen zum 1000 mal^^
 
Also, du hast in Inhalt deinen string stehn
Delphi-Quellcode:
Inhalt := 'high xxx';
dann musst du eigentlich nur alles bis zum leerzeichen weglöschen, und schon steht in Inhalt dein 'xxx'

Delphi-Quellcode:
delete(Inhalt , 1, pos(' ', zeile));

Wuaegner 7. Mai 2005 20:49

Re: Strings Zerlegen zum 1000 mal^^
 
oder so:
Delphi-Quellcode:
var str,strzwei: string;
begin
 str:= 'XXX test';
 strzwei:= copy(str,5,length(str)-4);
 Showmessage(strzwei);
end;

doom98 7. Mai 2005 21:06

Re: Strings Zerlegen zum 1000 mal^^
 
das prob is weiß ja nicht wie lange test ist btw was überhaupt test sein wird... aber trotzdem danke

Wuaegner 7. Mai 2005 21:27

Re: Strings Zerlegen zum 1000 mal^^
 
Zitat:

das prob is weiß ja nicht wie lange test ist btw was überhaupt test sein wird... aber trotzdem danke
das musst du bei meiner möglichkeit auch nicht :zwinker:

St.Pauli 7. Mai 2005 21:46

Re: Strings Zerlegen zum 1000 mal^^
 
Um auf Deadinpacs Problem zurückzukommen - ich war fleißig, und hab nochmal gearbeitet, jetzt ist es ganz nach deinen Wünschen:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
VAR i, Geld, Geld2: integer;
   namealt, nameneu : string;
begin
  Memo1.Lines.LoadFromFile('Geld.txt'); //In der Datei Geld.txt sind alle Daten
  namealt := Copy(Memo1.Lines[0], 19, Pos(' legt', Memo1.Lines[0])-19); //der erste Name wird erstellt
  nameneu := '';
  for i := 0 to Memo1.Lines.Count do //Alle Einträge durchgehen
  begin

  IF (Pos('legt', Memo1.Lines[i]) > 0) THEN nameneu := Copy(Memo1.Lines[i], 19, Pos(' legt', Memo1.Lines[i])-19);
  IF (Pos('nimmt sich', Memo1.Lines[i]) > 0) THEN nameneu := Copy(Memo1.Lines[i], 19, Pos(' nimmt sich', Memo1.Lines[i])-19);

  IF (namealt = nameneu) THEN
  begin
  IF (Pos('legt', Memo1.Lines[i]) > 0) THEN
    begin
      Geld2 := StrToInt(Copy(Memo1.Lines[i], 19 + length(Nameneu) + length(' legt '), Pos(' €', Memo1.Lines[i]) - (19 + length(Namealt) + length(' legt '))));
      Geld := Geld + Geld2; //Den "Legt" Betrag addieren
    end;

  IF (Pos('nimmt sich', Memo1.Lines[i]) > 0) THEN
    begin
      Geld2 := StrToInt(Copy(Memo1.Lines[i], 19 + length(Nameneu) + length(' nimmt sich '), Pos(' €', Memo1.Lines[i]) - (19 + length(Namealt) + length(' nimmt sich '))));
      Geld := Geld - Geld2; //-
    end;
  end;

  IF ((namealt = nameneu) = false) THEN //Wenn die namen nicht identisch sind (neuer Benutzer)...
  begin
  Memo2.Lines.Add(namealt + ' = ' + IntToStr(Geld)); //...dann adde erstmal die alten Daten in die 2te Memo
  Geld := 0; //Geld auf 0, eigentlich unnötig
  namealt := nameneu; //Hier werden die Namen gleichgesetzt, sonst wäre diese Bedinung immer True
  IF (Pos('legt', Memo1.Lines[i]) > 0) THEN
    begin
      Geld2 := StrToInt(Copy(Memo1.Lines[i], 19 + length(Nameneu) + length(' legt '), Pos(' €', Memo1.Lines[i]) - (19 + length(Nameneu) + length(' legt '))));
      Geld := Geld2;
    end;

  IF (Pos('nimmt sich', Memo1.Lines[i]) > 0) THEN
    begin
      Geld2 := StrToInt(Copy(Memo1.Lines[i], 19 + length(Nameneu) + length(' nimmt sich '), Pos(' €', Memo1.Lines[i]) - (19 + length(Nameneu) + length(' nimmt sich '))));
      Geld := 0 - Geld2 ;
    end;
  IF (i = Memo1.Lines.Count-1) THEN Memo2.Lines.Add(namealt + ' = ' + IntToStr(Geld));
  end;

 IF (i = Memo1.Lines.Count-1) THEN Memo2.Lines.Add(namealt + ' = ' + IntToStr(Geld));
Bei Fragen schick mir einfach ne PN. :wink:

PS: Hoffe es gehts

JasonDX 7. Mai 2005 22:11

Re: Strings Zerlegen zum 1000 mal^^
 
wieso so kompliziert? ;)

Delphi-Quellcode:

procedure MachDasDingsda;
var
  NamensListe: array of string;
  GeldListe: array of integer;
  function Index(von: string): integer; //Die ganze funktion nur um die namen zu organisieren, ging sicher noch einfacher
  var
    i: integer;
  begin
    result := -1;
    for i := 0 to high(NamensListe) do
      if von = NamensListe[i] then
        result := i;
    if result < 0 then begin
      result := length(NamensListe);
      setLength(NamensListe, result + 1);
      NamensListe[result] := von;
      setLength(GeldListe, result + 1);
      GeldListe[result] := 0;
    end;
  end;
var zeile, who: string;
    money, Factor, i, j, ind: integer;
begin
  for j := 0 to Memo1.Lines.Count - 1 do begin //Für jede zeile
    zeile := Memo1.Lines[j]; //alles rausparsen
    delete(zeile, 1, pos(': ', Zeile) + 1);
    who := copy(zeile, 1, pos(' ', Zeile) - 1);
    delete(zeile, 1, pos(' ', Zeile));
    case zeile[1] of
      'n': Factor := -1; //nimmt sich
      'l': Factor := 1; //legt hinein
      'b': Factor := 0; //beseitigt
    end;
    for i := 0 to ord(Factor < 0) do
      delete(Zeile, 1, pos(' ', Zeile));
    TryStrToInt(copy(Zeile, 1, pos(' ', Zeile) - 1), money);
    ind := Index(who);
    GeldListe[ind] := GeldListe[ind] + money * Factor; //und ausrechnen
  end;
end;
dürfte auch klappen

PS: nicht Memo1.Lines.Count sondern .Count - 1 ;)

//Edit: Namensliste, nicht Namesliste... sch*** schreibfehler :wall:
@Deadinpac: Jetzt dürfts ohne Fehler klappen

Deadinpac 8. Mai 2005 11:04

Re: Strings Zerlegen zum 1000 mal^^
 
Danke das ihr euch Soviel Arbeit macht nur für mich :-D

Nur entweder bin ich zu blöd oder die QT klappen nicht :wall:

weil bei St.Pauli der Rechnet nicht zusammen so wie ich es gesehen habe

und bei Chimaira kommt der fehler das die Namesliste nicht definiert ist

weil ich meine das so wie es hier funkt
http://www.swnews.de/?sw=logberechner

08.05.05 - 11:44: Lazyboy legt 8767 € in das Schliessfach.
08.05.05 - 11:39: FireFox legt 11299 € in das Schliessfach.
08.05.05 - 11:21: Threepwood legt 5142 € in das Schliessfach.
08.05.05 - 10:39: Sven legt 6489 € in das Schliessfach.
08.05.05 - 10:16: DragonHeart legt 490 € in das Schliessfach.
08.05.05 - 10:04: Seti legt 39717 € in das Schliessfach.
08.05.05 - 09:28: Nemesis legt 11000 € in das Schliessfach.
08.05.05 - 08:25: Erpel legt 6706 € in das Schliessfach.
08.05.05 - 02:24: Reins legt 2554 € in das Schliessfach.
08.05.05 - 01:14: chrissss legt 2219 € in das Schliessfach.
08.05.05 - 00:31: Lazyboy legt 150000 € in das Schliessfach.
08.05.05 - 00:19: addi legt 2255 € in das Schliessfach.
07.05.05 - 23:05: Omikr0n legt 10000 € in das Schliessfach.
07.05.05 - 21:55: DragonHeart legt 2570 € in das Schliessfach.
07.05.05 - 21:34: Milchtrinker legt 1245 € in das Schliessfach.
07.05.05 - 21:23: Toby legt 1754 € in das Schliessfach.
07.05.05 - 20:50: addi legt 2754 € in das Schliessfach.
07.05.05 - 20:09: Duddits legt 1417 € in das Schliessfach.
07.05.05 - 20:05: GUnit legt 25000 € in das Schliessfach.
07.05.05 - 19:56: Atze legt 9658 € in das Schliessfach.
07.05.05 - 19:45: Toby legt 9964 € in das Schliessfach.
07.05.05 - 19:02: Sven legt 464 € in das Schliessfach.
07.05.05 - 15:12: Nemesis legt 17000 € in das Schliessfach.
07.05.05 - 15:09: Toby legt 5240 € in das Schliessfach.
07.05.05 - 14:55: DragonHeart legt 2483 € in das Schliessfach.
07.05.05 - 14:18: chrisimausi legt 1287 € in das Schliessfach.
07.05.05 - 13:35: Milchtrinker legt 17645 € in das Schliessfach.
07.05.05 - 10:29: Erpel legt 112 € in das Schliessfach.
07.05.05 - 09:18: Nemesis legt 31000 € in das Schliessfach.
07.05.05 - 01:36: Lazyboy legt 8767 € in das Schliessfach.
07.05.05 - 01:08: Threepwood legt 5794 € in das Schliessfach.
07.05.05 - 01:01: Sven legt 1242 € in das Schliessfach.
07.05.05 - 00:03: Erpel legt 1271 € in das Schliessfach.
06.05.05 - 23:47: Sven legt 3014 € in das Schliessfach.
06.05.05 - 23:27: Erpel legt 611 € in das Schliessfach.
06.05.05 - 23:10: Erpel legt 784 € in das Schliessfach.
06.05.05 - 22:57: Erpel legt 254 € in das Schliessfach.
06.05.05 - 22:54: Erpel legt 392 € in das Schliessfach.


MFG

Deadinpac


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:04 Uhr.
Seite 2 von 3     12 3      

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-2025 by Thomas Breitkreuz