Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Stringfunktionen (https://www.delphipraxis.net/165669-stringfunktionen.html)

Slashmob 10. Jan 2012 19:39

Stringfunktionen
 
Hallo,

ich will aus einer Textdatei, mit dem Inhalt z.B. X123Y456 oder DELTAX51DELTAY175, die Zahlenwerte "herausfiltern."
Die Zahlenwerte sind gesuchte Koordinaten.

Ich vermute mal das dürfte irgendwie mit Copy,Pos und Delete gehen.
Kann mir jemand konkret am obigen Beispiel zeigen wie das codemäßig aussehen muss?
Meine eigenen Versuche führten nicht zum Ziel...:(

Gruß Slash

daywalker9 10. Jan 2012 19:46

AW: Stringfunktionen
 
Delphi-Quellcode:

for I := 1 to Length(Zeile) do
begin
  if (Zeile[I] in ['0'..'9']) do
     Result := Result + Zeile[i];
end;
Zeile Zeichen für Zeichen durchgehen und alles was numerisch ist sammeln

Slashmob 10. Jan 2012 19:56

AW: Stringfunktionen
 
Erstmal Danke. Kann ich denn damit auch die X- und Y-Koordinaten unterscheiden? Oder hab ich damit nur einen "Topf voller Zahlen"?

Mir geht es darum aus jeder Zeile einen X-Wert und einen Y-Wert zu bekommen.
Geht das denn alternativ auch irgendwie mit copy,pos und delete?? (Das wäre sogar zu bevorzugen, weil ich diese drei Funktionen anhand dieses Beispiels lernen muss)


Gruß Slash

Aphton 10. Jan 2012 20:16

AW: Stringfunktionen
 
Überleg doch selbst! Ist ja gar nicht so schwer:

Code:
1. Solange löschen, bis eine Zahl oder das Ende erreicht wird; beim Letzterem: überspringe nächsten beiden Punkte
2. Solange die Zahl extrahieren (Zahl speichern, aus dem Originalstring löschen), bis entweder ein Buchstabe erreicht oder an das Ende gelangt wurde; bei Letzterem: überspringe nächsten Punkt
3. Springe zu Punkt 1
Code:
Umgesetzt (Originalstring "X123Y456")
1. Resultat: "123Y456"
2. Resultat: 123 (Originalstring "Y456")
3. -> 1.

1. Resultat: "456"
2. Resultat: 456 (Originalstring ""; Punkt 3 wird übersprungen)
Thats it;
Funktioniert genausogut mit DELTAX123... Zeugs

Aphton 10. Jan 2012 20:23

AW: Stringfunktionen
 
(Doppelpost wegen der Trennung; Sry)

Code:
* String = 'ABCDEFG'

- Copy(String, Position, Stellen)
Copy(String, 3, 2) -> Kopiere ab der Position 3 (Buchstabe "C") 2 Stellen = "CD"

- Delete(String, Position, Stellen)
Delete(String, 3, 2) -> Lösche ab der Position 3 (Buchstabe "C") 2 Stellen = "ABEFG"

- Pos(String, GesuchterString)
Pos(String, 'CD') -> suche nach der Position CD im String 'ABCDEFG' und liefere den Index als Zahl zurück = 3
Wenn du scheiterst, wird dir gerne geholfen. Nur wirds dir keiner Vorkauen!

Bernhard Geyer 10. Jan 2012 20:25

AW: Stringfunktionen
 
Zitat:

Zitat von daywalker9 (Beitrag 1145272)
Delphi-Quellcode:
  if (Zeile[I] in ['0'..'9']) do

Dein XE2 sollte dich hier aber darauf hinweisen doch die Funktion CharInSet zu verwenden...

Slashmob 10. Jan 2012 21:40

AW: Stringfunktionen
 
Zitat:

Zitat von Aphton (Beitrag 1145283)
(Doppelpost wegen der Trennung; Sry)

Code:
* String = 'ABCDEFG'

- Copy(String, Position, Stellen)
Copy(String, 3, 2) -> Kopiere ab der Position 3 (Buchstabe "C") 2 Stellen = "CD"

- Delete(String, Position, Stellen)
Delete(String, 3, 2) -> Lösche ab der Position 3 (Buchstabe "C") 2 Stellen = "ABEFG"

- Pos(String, GesuchterString)
Pos(String, 'CD') -> suche nach der Position CD im String 'ABCDEFG' und liefere den Index als Zahl zurück = 3
Wenn du scheiterst, wird dir gerne geholfen. Nur wirds dir keiner Vorkauen!

Ich wills ja verstehen und lernen, mir fällts halt leichter wenn ich etwas "Neues" anhand eines konkreten Beispiels sehe...dann hab ichs vor Augen und kann es woanders auch andwenden.

Versuche mich mal dran. Wenn Fragen sind, dann meld ich mich!
Danke dir nochmal!

Slashmob 11. Jan 2012 20:40

AW: Stringfunktionen
 
Mal ne Frage. Funktioniert das so?

Delphi-Quellcode:
While pos('DELTAY',s) do  // Solange "DELTAY" im String...
delete(s,1,6);                    // lösche "DELTAY"
deltay:=copy(s,1,maxint);         // deltay-Wert ist Zahlenwert nach "DELTAY"

While-Schleife oder wäre
Delphi-Quellcode:
FOR i=1 to length(s)
besser?
Was heißt maxint?? -> bis Ende des strings? Wäre length(s) auch möglich?

Danke schon mal vorab!

himitsu 11. Jan 2012 20:51

AW: Stringfunktionen
 
Zitat:

Zitat von Slashmob (Beitrag 1145503)
Mal ne Frage. Funktioniert das so?

Wieso probierst du es nicht aus?

Zitat:

Delphi-Quellcode:
copy(s,1,maxint)

Ja, Length geht auch.

Aber wozu?

Von Anfang bis Ende ist alles, somit ist das doch vollkommen sinnlos. :roll:

Zitat:

lösche "DELTAY"
Nein, das ist "Lösche die ersten 6 Zeichen", egal ob dort DALAY drin steht.

Für die FOR-Schleife mußt du wissen ob und wie oft was vorkommt, was du hier aber nicht unbedingt weißt.
Kennst du StringReplace?

p80286 11. Jan 2012 21:16

AW: Stringfunktionen
 
Deine Strings sollten so aussehen:
Delphi-Quellcode:
DELTAX1111
DELTAX1111DELTAY2222
DELTAY2222DELTAX1111
DELTAY2222
Delphi-Quellcode:
pdeltax:=pos('DELTAX',s);
pdeltay:=pos('DELTAY',s);
pdeltax und pdeltay enthalten 0 wenn nicht in s enthalten,
oder 1 oder größer wenn in s enthalten.
je nach dem wert von pdelta kopierst du dann den Inhalt:
Delphi-Quellcode:
copy(s,7,pdelta-8)
oder
Delphi-Quellcode:
copy(s,pdelta+6,maxint)
Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:48 Uhr.

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