Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Wort nach einem Wort (https://www.delphipraxis.net/129680-wort-nach-einem-wort.html)

PhilmacFLy 23. Feb 2009 23:50


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?

BackOrifice 23. Feb 2009 23:54

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.

PhilmacFLy 23. Feb 2009 23:56

Re: Wort nach einem Wort
 
und wie würde das denn gehen weil der string sieht nämlich genau so aus also "wort1 wort2"

ryLIX 24. Feb 2009 00:01

Re: Wort nach einem Wort
 
http://www.delphibasics.co.uk/RTL.asp?Name=AnsiPos

PhilmacFLy 24. Feb 2009 00:03

Re: Wort nach einem Wort
 
ne ich bruach ja nicht als rückgabe nen bool sondern den string von wort2

Neutral General 24. Feb 2009 00:05

Re: Wort nach einem Wort
 
Du bekommst ein Int. Der Rest ist Copy und Denksache :P

PhilmacFLy 24. Feb 2009 00:08

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

Neutral General 24. Feb 2009 00:12

Re: Wort nach einem Wort
 
Zitat:

Zitat von PhilmacFLy
...oder stell ich mich grad zu blöd an

Ja :mrgreen: :P

Ü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 ;)

omata 24. Feb 2009 02:48

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;
RegExpr

BackOrifice 24. Feb 2009 04:52

Re: Wort nach einem Wort
 
Ohne, dass man jetzt 4k Zeilen RegExpr einbinden muss:

Delphi-Quellcode:
function GetSecondWord(Str: String): String;
begin
  Result := Copy(Str,Pos(' ',Str) + 1,Length(Str);
end;
Davon ausgehend, dass String := 'Wort1 Wort2' ist.

DP-Maintenance 24. Feb 2009 05:41

DP-Maintenance
 
Dieses Thema wurde von "mkinzler" von "VCL / WinForms / Controls" nach "Sonstige Fragen zu Delphi" verschoben.
Geht ja um keine Komponente/Control

spaxxn 24. Feb 2009 07:54

Re: Wort nach einem Wort
 
BackOrifice, du bist ein guter Mann. So lernt er bestimmt sich Lösungen zu erarbeiten...

Reinhardtinho 24. Feb 2009 08:10

Re: Wort nach einem Wort
 
Guck dir in der Hilfe (oder auch hier im Forum) mal StringReplace an.

Blackheart 24. Feb 2009 08:32

Re: Wort nach einem Wort
 
Zitat:

Zitat von Reinhardtinho
Guck dir in der Hilfe (oder auch hier im Forum) mal StringReplace an.

Und was soll das bringen. :gruebel:

Meflin 24. Feb 2009 08:33

Re: Wort nach einem Wort
 
Zitat:

Zitat von Blackheart
Zitat:

Zitat von Reinhardtinho
Guck dir in der Hilfe (oder auch hier im Forum) mal StringReplace an.

Und was soll das bringen. :gruebel:

Er kennt das erste Wort. Also kann er kurz und schmerzlos "Wort1 " durch "" ersetzen und hat das zweite Wort... Man muss ja nicht immer mit copy und Pos rumfrickeln.

DeddyH 24. Feb 2009 09:11

Re: Wort nach einem Wort
 
Nur der Vollständigkeit halber: Delete ginge auch noch.

turboPASCAL 24. Feb 2009 10:14

Re: Wort nach einem Wort
 
Oder eine For-Schleife. :P

;)

PhilmacFLy 24. Feb 2009 10:57

Re: Wort nach einem Wort
 
Ja ich habs dann auch mit einer for Schleife glöst weil ich bei dem anderen nicht durchgestiegen bin ^^

guidok 24. Feb 2009 11:03

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:

weil ich bei dem anderen nicht durchgestiegen bin
Da haben wir schon den Salat...

PhilmacFLy 24. Feb 2009 11:15

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.

ralfiii 24. Feb 2009 12:29

Re: Wort nach einem Wort
 
Ich hab dafür zwei sehr lieb gewonnene Funktionen (braucht man wirklich oft):

Delphi-Quellcode:
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;
Lösung zu deiner Frage:

Delphi-Quellcode:
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
hth,
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