Entwickler-Ecke

Sonstiges (Delphi) - String auseinander rupfen ??


Ace87 - Mo 30.10.06 15:38
Titel: String auseinander rupfen ??
Hallo
Ich wollte mal Fragen, ich ich einen Text auseinander rupfe.
Im meinem beipiel habe ich einen String, der mit ' Öffne Word' gefüllt ist;
und ich will nur Word rausfiltern, weil ich Word dann öffnen will.
kann mir jemand helfen?? ich habe keine Ahnung, wo ich zu suchen anfangen soll.

Mit freundlichen Grüßen

Ace


Marco D. - Mo 30.10.06 15:43

Schaue dir mal Pos und Copy an, damit kommst du weiter. ;)


jaenicke - Mo 30.10.06 15:44

Naja, generell mit Pos (Position eines Strings in einem anderen suchen), Copy (Teil eines Strings kopieren) und Delete (Teil eines Strings loeschen). Dazu dann PosEx, wenn man eine weitere Position eines Strings hinter dem ersten Vorkommen suchen willst.


Freiberger - Mo 30.10.06 15:45

Hy,
versuche es doch mal mit stringreplace.
Ersetze das Wort 'Öffne' einfach durch ''
dann löschst du mit Trim noch die überflüssigen Leerzeichen...


jaenicke - Mo 30.10.06 15:47

Naja, aber ich nehme an, dass er auch erstmal rausfinden muss, ob da Oeffne steht...


Ace87 - Mo 30.10.06 15:49

Ne die Abfrage, ob vorne öffnen steht habe ich schon
braucht nur den Text hinter Öffnen


Freiberger - Mo 30.10.06 15:52

oder du machst es mit TStringlist.
schau mal unter CommaText und DelimitedText.

Da kannst du auch lange text in einzelne Wörter zerlegen...


Marc. - Mo 30.10.06 15:53

oder so:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
 s: string;
 p: integer;
begin
 s := 'Oeffne Word';
 p := pos('Word',s);
 label1.Caption := copy(S,p,(1+length(S)- p));

copy ab gesamtlänge des strings - länge deines wortes = word ;)


jasocul - Mo 30.10.06 15:55

Na denn kannst du ja mit Pos, Copy, Delete und Length alles erledigen. Alternativ ginge der Einsatz von StringReplace. Je nachdem, wie Du vorgehen möchtest. Eine Übersicht mit Beispielen zu String-Operationen findest du auch auf meiner Web-Site in den "Tutorials".


Ace87 - Mo 30.10.06 15:55

ok habe es so gelöst


Delphi-Quelltext
1:
StringReplace(Text,'Öffne','',[rfIgnoreCase])                    


hoffe das geht so
weil ich das gerade nicht ausprobieren kann


jaenicke - Mo 30.10.06 15:55

Naja, dann mach doch einfach

Delphi-Quelltext
1:
Delete(DeinString, 1, Length(ZuEntfernenderString));                    

Beispiel:

Delphi-Quelltext
1:
Delete(' Oeffne Word'1, Length(' Oeffne '));                    

Natuerlich werden das dann Variablen sein, das Beispiel dient nur der Illustration...


Ace87 - Mo 30.10.06 15:58

also vielleicht noch zur erläuterung
ich weiß nicht was hinter Öffne steht

Word war jetzt nur ein beispiel
will das so machen, dass da irgend was hinter stehen kann


Marc. - Mo 30.10.06 16:12


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
var
 s: string;
 p: integer;
begin
 s := 'Oeffne DiesUndDasJenesUndAlles';
 p := length(S)-6// Oeffne hat 6 Buchstaben
 label1.Caption := Trim(copy(S,7,p)); //an 7, da 6zeichen+ein leerzeichen
so gehts ;)
sofer nur "Oeffne XY" der Text ist! ;)


jaenicke - Mo 30.10.06 16:13

user profile iconAce87 hat folgendes geschrieben:
also vielleicht noch zur erläuterung
ich weiß nicht was hinter Öffne steht

Word war jetzt nur ein beispiel
will das so machen, dass da irgend was hinter stehen kann

Genau macht ja der Code mit Delete, den ich direkt vor diesem Zitat von dir gepostet habe...

Der loescht eben das ' Oeffne ' davor und in dem String ist danach nur noch alles, was dahinter steht drin.


Ace87 - Mo 30.10.06 16:21

würde aber nicht funktionieren, wenn man ' Oeffne Word' oder noch mehr leerzeichen davor schreibt
schreiben würde oder??


Marc. - Mo 30.10.06 16:24

Dann entfernst du halt die leerzeichen, die vor und hinter den wörtern stehen, mit Trim!

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
var
 s: string;
 p: integer;
begin
 s := ' Oeffne DiesUndDasJenesUndAlles';
 p := length(Trim(S))-6// Oeffne hat 6 Buchstaben
 label1.Caption := Trim(copy(Trim(S),7,p));
;)


jaenicke - Mo 30.10.06 16:31

Was meinst du, koennte nicht funktionieren? Der Befehl Delete loescht einfach die angegebene Anzahl von Zeichen. Und wegen dem Umlaut: Ich sitze hier an einem Solaris Betriebssystem, da hab ich keine Umlaute. Deshalb das Oe und so...


Ace87 - Mo 30.10.06 16:31

ok vielen dank
Probiere das gleich mal aus
aber kleine Frage zu dem von mir


Delphi-Quelltext
1:
StringReplace(Text,'Öffne','',[rfIgnoreCase])                    


würde das auch funktionieren???


jaenicke - Mo 30.10.06 16:33

Klar, aber der Befehl ist in diesem Fall gar nicht notwendig. Der braucht naemlich vermutlich laenger, weil er eigentlich fuer das Ersetzen mehrerer Vorkommnisse eines Strings gedacht ist und ausserdem weitere Optionen hast (case-sensitive und so).


Freiberger - Mo 30.10.06 16:33

bei mir geht es wunderbar...
Text:= Trim( StringReplace(Text,'Öffne','',[rfIgnoreCase]) );


Ace87 - Mo 30.10.06 16:34

@ jaenicke
bei deinem Delete
löscht er das alle ' Öffnen' im ganzen String??
weil ich will ja nur das am anfang weg haben


jaenicke - Mo 30.10.06 16:41

Delete loescht nur das erste Vorkommen (anders als ReplaceString, das alle loescht). Delete sagst du: Loesche in dem String ab Zeichen Nummer x soundsoviele Zeichen aus dem String.
Mehr macht das nicht.
Wenn dein String also " Oeffne Word zum Oeffne n" ist, dann bleibt bei meinem Code danach "Word zum Oeffne n" uebrig.


Ace87 - Mo 30.10.06 16:53

StringReplace löscht nur alle, wenn man [rfReplaceAll] mitgibt
sonnst auch nur das erste