![]() |
Wort nach einem Wort
Ich habe folgendes problem ich habe einen String, dieser String besteht immer aus 2 Wörtern. Das erste wort ist mir bekannt. Wie kann ich jetzt das 2te Wort auslesen?
|
Re: Wort nach einem Wort
Length(str)
Pos(sub, str) Copy(str,pos,length) .... Zbs. könntest du nach dem Trennzeichen suchen, wenn der Str "Wort1 Wort2" ist und ab dem ersten Zeichen des 2. Wortes kopieren. |
Re: Wort nach einem Wort
und wie würde das denn gehen weil der string sieht nämlich genau so aus also "wort1 wort2"
|
Re: Wort nach einem Wort
|
Re: Wort nach einem Wort
ne ich bruach ja nicht als rückgabe nen bool sondern den string von wort2
|
Re: Wort nach einem Wort
Du bekommst ein Int. Der Rest ist Copy und Denksache :P
|
Re: Wort nach einem Wort
aber funktioniert das nicht nur wenn ich das 2te wort kenn oder stell ich mich grad zu blöd an
|
Re: Wort nach einem Wort
Zitat:
Überleg dir, welches Zeichen vor dem zweiten Wort steht. Das suchst du. Dann weißt du ab wo das 2. Wort anfängt. Dann gehts (je nach Geschmack) weiter mit Copy oder Delete ;) |
Re: Wort nach einem Wort
Delphi-Quellcode:
function GetWordTwo(text:string):string;
var RegExpr:TRegExpr; begin RegExpr:=TRegExpr.Create; try RegExpr.ModifierG:=true; RegExpr.Expression:='^([^ ]*) *([^ ]*)'; if RegExpr.Exec(text) then Result:=RegExpr.Match[2] else Result:=''; finally RegExpr.free; end; end; ![]() |
Re: Wort nach einem Wort
Ohne, dass man jetzt 4k Zeilen RegExpr einbinden muss:
Delphi-Quellcode:
Davon ausgehend, dass String := 'Wort1 Wort2' ist.
function GetSecondWord(Str: String): String;
begin Result := Copy(Str,Pos(' ',Str) + 1,Length(Str); end; |
DP-Maintenance
Dieses Thema wurde von "mkinzler" von "VCL / WinForms / Controls" nach "Sonstige Fragen zu Delphi" verschoben.
Geht ja um keine Komponente/Control |
Re: Wort nach einem Wort
BackOrifice, du bist ein guter Mann. So lernt er bestimmt sich Lösungen zu erarbeiten...
|
Re: Wort nach einem Wort
Guck dir in der Hilfe (oder auch hier im Forum) mal StringReplace an.
|
Re: Wort nach einem Wort
Zitat:
|
Re: Wort nach einem Wort
Zitat:
|
Re: Wort nach einem Wort
Nur der Vollständigkeit halber: Delete ginge auch noch.
|
Re: Wort nach einem Wort
Oder eine For-Schleife. :P
;) |
Re: Wort nach einem Wort
Ja ich habs dann auch mit einer for Schleife glöst weil ich bei dem anderen nicht durchgestiegen bin ^^
|
Re: Wort nach einem Wort
Man könnte den Gesamtstring auch einer TStringList zuweisen und als Delimiter das Leerzeichen nehmen...
Ich hoffe der Threaderöffner hat jetzt auch eine Lösung für sein Problem gefunden und vor allem auch verstanden! Die Moral von der Geschicht ist hier, wie eigentlich immer beim Programmieren, das es viele Lösungen gibt, die das gewünschte Ergebnis liefern. Wichtig ist, dass man versteht was man gerade tut und nicht einfach blind kopiert. Die beiden naheliegenden Lösungen in diesem Fall wurden bereits genannt: 1. Wenn das erste Wort bekannt ist und eine konstante Länge hat, dann kann man es mit Delete einfach aus dem String entfernen und das zweite Wort bleibt übrig. 2. Universeller ist es nach dem Trennzeichen (Leerzeichen) mit Pos zu suchen und alles was danach kommt bis zum Ende des Strings mit Copy als das zweite Wort zu interpretieren. Bei dieser Methode ist es egal, ob sich das erste Wort einmal ändert, solange sich das Trennzeichen nicht ändert. Edit: Zitat:
|
Re: Wort nach einem Wort
ja deswegen hab ichs ja mit for gemacht das weiss ich was ich mach. aber mit StringReplace hät ichs auch verstanden bzw delete.
|
Re: Wort nach einem Wort
Ich hab dafür zwei sehr lieb gewonnene Funktionen (braucht man wirklich oft):
Delphi-Quellcode:
Lösung zu deiner Frage:
function FirstWord(var WorkStr : String; Cut : boolean) : string;
// Gives back first parameter in String // if requested (CUT=TRUE) this word is being cut off the original // string // Leading spaces are NOT corrected (if necessary : TRIM) begin result:=FirstWordSeparator(' ',WorkStr,Cut); // single words can be separated by several spaces if Cut then WorkStr:=Trim(WorkStr); end; function FirstWordSeparator(sep : string;var WorkStr : String; Cut : boolean) : string; // Gives back first parameter delimited by "sep" in String // If requested (CUT=TRUE) result+separator are removed from the original string // If Separator is NOT found in WorkStr and Cut=True, then WorkStr:='' var counter : integer; begin counter:=pos(sep,WorkStr); // "abcXdef" -> counter=4 if counter>0 then result:=copy(WorkStr,1,counter-1) else result:=WorkStr; if Cut then begin if counter>0 then delete(WorkStr,1,counter+length(sep)-1) else WorkStr:=''; end; end;
Delphi-Quellcode:
hth,
var s : string;
Cmd : string; begin // ... s enthält irgendwas wie "blabla Kommando Params" FirstWord(s, True); // Erstes Wort (blabla) wegschneiden. Cmd:=FirstWord(s, True); // Cmd = Kommando // s enthält den "Reststring", also die Params Ralf |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:05 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