Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Zahlen in Memo ermitteln und in Int umwandeln (https://www.delphipraxis.net/93099-zahlen-memo-ermitteln-und-int-umwandeln.html)

Merchator 31. Mai 2007 18:37


Zahlen in Memo ermitteln und in Int umwandeln
 
Hi!
Ich bins mal wieder^^
Ich hatte mal wieder Lust, ein Tool zu scripten, doch an einer Stelle stocke ich...

So als Beispiel, im Memo steht:
.........(x) (y)
Straße 50 50 (ja, klingt merkwürdig, ist jetzt auch nur ein Beispiel ;))

Dann hab ich da die Buttons:
X+1
X-1
Y+1
Y-1
Nun möchte ich die Zahlen per Click auf einen der Buttons ändern
Beispiel: Ich drück X+1, dann steht da
Straße 51 50
dann drück ich Y-1
Dann steht da 51 49

Und ich hab keine Ahnung, wie ich die Zahlen im Memo "ermitteln" kann!
(Ich hatte da schon ne Methode, doch die klappt einfach nicht und ist, sag ich mal, "dämlich und anfängerhaft", ihr müsst garnet erst nach fragen^^)
Ich hab mal gelesen, dass geht irgendwie mit Pos, Sel, Copy, aber ich habe keine Ahnung, wie ich die Zahlen dann in Integer umwandeln kann.

Ich hoffe, ihr versteht, was ich meine...ich hab keine Ahnung, wie ich's erklären soll, falls ihr es net versteht:
Einfach nochmal fragen, ich versuch es sonst, besser zu erklären!

Klaus01 31. Mai 2007 18:49

Re: Zahlen in Memo ermitteln und in Int umwandeln
 
Zitat:

wie ich die Zahlen dann in Integer umwandeln kann
Das geht mit StrToInt()

Grüße
Klaus

Merchator 31. Mai 2007 18:55

Re: Zahlen in Memo ermitteln und in Int umwandeln
 
Ja, das ist mir klar :D
Vllt hab ich mich doof ausgedrückt:
Mir geht es ums Ermitteln der Zahlen im Memo, und sie DANN mit StrToInt in Integer umzuwandeln.

Also meine Hauptfrage ist eher:
Wie kann ich Zahlen im Memo ermitteln (imer nur die letzte Zeile)

Da steht zum Beispiel:
Straße 50 50
Straße 50 51
Straße 50 52
Straße 51 52

Nun möchte ich, dass die Zahlen 51, 52 aus der letzten Zeile in INT umgewandelt werden.
Wie mache ich das?

mfG,
Merchator

Testy 31. Mai 2007 18:57

Re: Zahlen in Memo ermitteln und in Int umwandeln
 
Schau dir den Thread mal an Link
Dort steht, wie du auf "elegante" Weise bestimmte Formate aus einem Memo lesen kannst!

Gruß!

inherited 31. Mai 2007 18:58

Re: Zahlen in Memo ermitteln und in Int umwandeln
 
Die letzte Zeile bekommst du mit Memo1.Lines[Memo1.Lines.Count-1]
mit Pos und PosEx kommst du an die Position der beiden Leerzeichen
mit Copy kannst du dann teile des Strings kopieren.

Merchator 31. Mai 2007 20:00

Re: Zahlen in Memo ermitteln und in Int umwandeln
 
hi!
Danke für die Antworten!
Leider hab ich mit den Begrifen Pos und Copy noch nie gearbeitet. Aus der Hilfe werd ich auch net schlau O.o
Hat jemand nen Link wo es steht, wies geht, oder kanns eben in 1-2 Sätzen erklären?

Nehmt Rücksicht auf einen Anfänger :wiejetzt:

marabu 31. Mai 2007 20:13

Re: Zahlen in Memo ermitteln und in Int umwandeln
 
Herzlich willkommen in der Delphi-PRAXiS, Merchator.

Mit diesem Trick kommst du an die beiden Zahlen in einem String - egal ob es sich dabei um eine Zeile aus einem Memo oder ein Item aus einer ListBox handelt:

Delphi-Quellcode:
procedure ExtractLastWords(const line: string; s: TStrings; n: Word);
begin
  s.BeginUpdate;
  s.Clear;
  s.CommaText := line;
  while s.Count > n do
    s.Delete(0);
  s.EndUpdate;
end;
Testen kannst du es so:

Delphi-Quellcode:
procedure TDemoForm.ButtonClick(Sender: TObject);
var
  i: Integer;
  s: TStrings;
begin
  s := TStringList.Create;
  with Memo do
    for i := 0 to Pred(Lines.Count) do
    begin
      ExtractLastWords(Lines[i], s, 2);
      ShowMessage(Format('x = %d, y = %d', [StrToInt(s[0]), StrToInt(s[1])]));
    end;
  s.Free;
end;
Freundliche Grüße vom marabu

Merchator 31. Mai 2007 21:00

Re: Zahlen in Memo ermitteln und in Int umwandeln
 
Hey!
Vielen dank, es klappt soweit ganz gut!
Ich habe deinen Code jetzt mal ein wenig umgewandelt:

Delphi-Quellcode:
var
s: TStrings;
begin
  s := TStringList.Create;
  with memo1 do
    for i := 0 to Memo1.Lines.Count-1 do //<-Da gibt es ein Problem!
     begin
      ExtractLastWords(Lines[i], s, 2);
      XWert:=StrToInt(s[0]);
      YWert:=StrToInt(s[1]);
      memo1.lines.add('Straße '+ IntToStr(XWert+1)+' ' + IntToStr(YWert));
      end;
  s.Free;
end;
Eine kleinigkeit ist da aber noch.
Zum Beispiel steht da
Straße 100 100
Drück ich jetzt nen Knopf, das Y+1 gerechnet werden soll, steht das da erst ganz normal:

Straße 100 100
Straße 100 101

Drück ich den jetzt aber nochmal, verdoppeln sich die Zeilen plötzlich :roll:
Etwa so:

Straße 100 100
Straße 100 101
Straße 100 101
Straße 100 102

ICh glaube, ich weis worans liegt (s. Soruce)
Aber wie behebe ich das jetzt?
Danke im vorraus! ;)

Merchator 31. Mai 2007 21:12

Re: Zahlen in Memo ermitteln und in Int umwandeln
 
HAlt, Problem hat sich gelöst

Hab einfach folgendes genommen^^

for i := memo1.Lines.Count-1 to Memo1.Lines.Count-1 do

JEdenfalls Danke für die Hilfe hier!

Klaus01 1. Jun 2007 07:11

Re: Zahlen in Memo ermitteln und in Int umwandeln
 
Zitat:

Zitat von Merchator
Hey!
Vielen dank, es klappt soweit ganz gut!
Ich habe deinen Code jetzt mal ein wenig umgewandelt:

Delphi-Quellcode:
var
s: TStrings;
begin
  s := TStringList.Create;
  with memo1 do
    for i := 0 to Memo1.Lines.Count-1 do //<-Da gibt es ein Problem!
     begin
      ExtractLastWords(Lines[i], s, 2);
      XWert:=StrToInt(s[0]);
      YWert:=StrToInt(s[1]);
      memo1.lines.add('Straße '+ IntToStr(XWert+1)+' ' + IntToStr(YWert));
      end;
  s.Free;
end;
Eine kleinigkeit ist da aber noch.
Zum Beispiel steht da
Straße 100 100
Drück ich jetzt nen Knopf, das Y+1 gerechnet werden soll, steht das da erst ganz normal:

Straße 100 100
Straße 100 101

Drück ich den jetzt aber nochmal, verdoppeln sich die Zeilen plötzlich :roll:
Etwa so:

Straße 100 100
Straße 100 101
Straße 100 101
Straße 100 102

ICh glaube, ich weis worans liegt (s. Soruce)
Aber wie behebe ich das jetzt?
Danke im vorraus! ;)

Die Zeilen verdoppeln sich nicht plötzlich, sie haben sich auf beim ersten Aufruf verdoppelt.

Das liegt daran, daß Du mit " memo1.lines.add('Straße '+ IntToStr(XWert+1)+' ' + IntToStr(YWert));"
eine neue Zeile an das Memo anhängst und nicht die bestehende Zeile ersetzt.

Das würde dann so gehen:

Delphi-Quellcode:
  Memo1.lines.Strings[i]:='Straße '+ IntToStr(XWert+1)+' ' + IntToStr(YWert);
Grüße
Klaus


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:26 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz