AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Stringfunktionen

Ein Thema von Slashmob · begonnen am 10. Jan 2012 · letzter Beitrag vom 11. Jan 2012
Antwort Antwort
Slashmob

Registriert seit: 28. Okt 2011
45 Beiträge
 
#1

Stringfunktionen

  Alt 10. Jan 2012, 20:39
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
  Mit Zitat antworten Zitat
daywalker9

Registriert seit: 1. Jan 2010
Ort: Leer
594 Beiträge
 
Delphi XE3 Professional
 
#2

AW: Stringfunktionen

  Alt 10. Jan 2012, 20:46
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
Lars
  Mit Zitat antworten Zitat
Slashmob

Registriert seit: 28. Okt 2011
45 Beiträge
 
#3

AW: Stringfunktionen

  Alt 10. Jan 2012, 20:56
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
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#4

AW: Stringfunktionen

  Alt 10. Jan 2012, 21:16
Ü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
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG

Geändert von Aphton (10. Jan 2012 um 21:32 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#5

AW: Stringfunktionen

  Alt 10. Jan 2012, 21:23
(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!
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Stringfunktionen

  Alt 10. Jan 2012, 21:25
  if (Zeile[I] in ['0'..'9']) do
Dein XE2 sollte dich hier aber darauf hinweisen doch die Funktion CharInSet zu verwenden...
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Slashmob

Registriert seit: 28. Okt 2011
45 Beiträge
 
#7

AW: Stringfunktionen

  Alt 10. Jan 2012, 22:40
(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!
  Mit Zitat antworten Zitat
Slashmob

Registriert seit: 28. Okt 2011
45 Beiträge
 
#8

AW: Stringfunktionen

  Alt 11. Jan 2012, 21:40
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 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!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#9

AW: Stringfunktionen

  Alt 11. Jan 2012, 21:51
Mal ne Frage. Funktioniert das so?
Wieso probierst du es nicht aus?

Zitat:
copy(s,1,maxint)
Ja, Length geht auch.

Aber wozu?

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

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?
$2B or not $2B

Geändert von himitsu (11. Jan 2012 um 22:00 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#10

AW: Stringfunktionen

  Alt 11. Jan 2012, 22:16
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:
copy(s,7,pdelta-8) oder
copy(s,pdelta+6,maxint) Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:42 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