Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi zahlen aus unterschiedlichen memos auslesen (https://www.delphipraxis.net/14846-zahlen-aus-unterschiedlichen-memos-auslesen.html)

centauri 16. Jan 2004 18:06


zahlen aus unterschiedlichen memos auslesen
 
ich möchte aus einem Memo das diesen inhalt hat:



Code:
 Erz (360): 4.579    Kristalle (150): 2.397 
 Aluminium (200): 3.139    Energie (65): 111.267 
 Legierungen (110): 1.639    Credits insgesamt: 340.943,65


dort will ich von erz, alu, leg, kris und enrg jeweils die zahl hinter den doppelpunkten auslesen und sie einer variablen zu weisen so dass ich nacher variablen in integer habe die wie folgt aussehen:


erz=4579;
alu=3139;
leg=1639;
kris=2397;
enrg=111267;



die zahlen in den klammern sowie die späteren variablen (zahlen hinter dem doppelpunkt) sind bei jeder neuberechnung anderst (komplettes memo wird aus externem prog eingefügt). Die Zahlen bewegen sich wahrscheinlic bis in einen bereich von 12 stellen, koennten aber auch mehr sein. aber nicht unendlich.

Jetzt hab ich das problem wie krieg ich des hin? hat vielleicht jemand eine idee oder schon ein fertigen code den man anpassen könnte?

würd mich freuen wenn mir jemand helfen könnte...


greetz
centauri

Sharky 16. Jan 2004 18:17

Re: zahlen aus unterschiedlichen memos auslesen
 
Hai centauri,

herzlich Willkommen in der Delphi-PRAXIS.

Wenn ich das richtig sehe ist allen Zahlen gemeinsam das davor ein ": " steht und an danach ein " " oder ein CR/LF

Mit den Funktionen Pos und Copy solltest Du das eigentlich recht leicht lösen können.

centauri 16. Jan 2004 18:21

Re: zahlen aus unterschiedlichen memos auslesen
 
ich werds mal ausprobieren und mich dann wieder melden... thx

Michael Leyhe 16. Jan 2004 18:21

Re: zahlen aus unterschiedlichen memos auslesen
 
Hallo!

Am einfachsten ist das wenn die einzelnen Daten untereinander in der Memo stehen. (In deinem Source stehen sie nebeneinander!).

Du bekommst den Inhalt einer bestimmten Zeile des Memos durch

Delphi-Quellcode:
memo1.lines[zeile]
Jetzt kannst du mit Pos und Copy den Inhalt auslesen

centauri 16. Jan 2004 18:29

Re: zahlen aus unterschiedlichen memos auslesen
 
die kommen aus der quelle aber leider so wie oben angegeben...

centauri 16. Jan 2004 20:29

Re: zahlen aus unterschiedlichen memos auslesen
 
so ich habs jetzt mal mit pos und copy versucht...
jetzt hab ich allerdings das problem, dass ich nur die erste der beiden zahlen in jeder zeile auslesen kann...

wie könnte ich an die zweite kommen?

Minz 16. Jan 2004 20:48

Re: zahlen aus unterschiedlichen memos auslesen
 
Angenommen du hast diese Zeile ausgelesen:

Erz (360): 4.579 Kristalle (150): 2.397

und ermittelst nun den ersten Wert, mit Pos und Copy, dann kannst du diesen Teil per Delete auch aus dem String entfernen, und hast dann nur noch

Kristalle (150): 2.397

übrig. Dies kannst du genauso verarbeiten wie das erste Stück usw.

Sharky 17. Jan 2004 07:28

Re: zahlen aus unterschiedlichen memos auslesen
 
Zitat:

Zitat von centauri
...jetzt hab ich allerdings das problem, dass ich nur die erste der beiden zahlen in jeder zeile auslesen kann...

Hai centauri,

ohne deinen Quellcode für das "suchen" der Zahlen zu sehen kann man da nicht viel sagen.
Zeige doch mal den Bereich in dem Du mit Copy und Pos versuchst die Zahlen im Text zu finden.

centauri 17. Jan 2004 14:28

Re: zahlen aus unterschiedlichen memos auslesen
 
so, mit der funkction kann ich die erste zahl auslesen... vielleicht kann mir den ja jemand umschreiben, dass sie die zweite zahl packt...

Delphi-Quellcode:
{© by Himitsu @ Delphi-PRAXiS         }
{Org by "Jens Schumann" @ Delphi-PRAXiS}

Function TForm3.GetNumbers(L: TStrings; aStart, aEnd: String; aPos: Integer): String;
    Function DeleteNonNumbers(Const Value: String): String;
      Var I: Integer;

      Begin
        Result := '';
        For I := 1 to Length(Value) do Begin
          If Value[I] in ['0'..'9', ',', '-'] Then Result := Result + Value[I];
          If Value[I] = '.' Then Result := Result + '';
        End;
        {eventuelle Tausendertrennzeichen entfernen}

      End;

    Var H: String;
      iCnt: Integer;
      aCount: Integer;

    Begin
      Result := '0';
      aStart := AnsiUpperCase(aStart);
      aEnd := AnsiUpperCase(aEnd);
      aCount := 0;
      For iCnt := 0 to L.Count - 1 do Begin
        H := AnsiUpperCase(L[iCnt]);
        If (Pos(aStart, H) > 0) and (Pos(aEnd, H) > 0) Then Begin
          Inc(aCount);
          If aCount = aPos Then Begin
            H := Copy(L[iCnt], Pos(aStart, H) + Length(aStart), Pos(aEnd, H) - Pos(aStart, H) - Length(aStart));
            H := DeleteNonNumbers(H);
            If H > '' Then Result := H Else Result := '0';
            break;
          End;
        End;
      End;
End;


thx
centauri


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:07 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-2025 by Thomas Breitkreuz