Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Copybefehl bei Strings (https://www.delphipraxis.net/84496-copybefehl-bei-strings.html)

Scorpion 17. Jan 2007 16:10


Copybefehl bei Strings
 
Hallo,

ich habe einen String, sagen wir

myString := Wort1,Wort2,Wort3,Wort4

Ich will jetzt den bereich zwischen dem 1. und dem 2. Komma auslesen, also Wort2, wie kann ich das denn machen ?

Thx

sirius 17. Jan 2007 16:14

Re: Copybefehl bei Strings
 
Versuchs doch mal mit PosEx :P

[edit=SirThornberry]Funktionsnamenschreibweise geändert :roll: Mfg, SirThornberry[/edit]

mkinzler 17. Jan 2007 16:15

Re: Copybefehl bei Strings
 
Oder mit Hilfe einer Stringliste

yörsch 17. Jan 2007 16:20

Re: Copybefehl bei Strings
 
versuchs mal damit
Delphi-Quellcode:
// String in TStrings umwandeln
procedure readcommand(line:string; Delimiter:array of char; Commandlist:TStrings);
var
  Pos1,Pos2:Integer;
  len:integer;
  dcount,delim:Integer;
  Help:string;
begin
   if Commandlist = NIL then
     Commandlist := TStrings.Create;
   Commandlist.Clear;
   dcount:=length(Delimiter);
   line:=trim(line);
   IF dcount>0 then
   begin
     pos2:=0;
     len:=Length(line);
     delim:=0;
     line:=line + Delimiter[dcount-1];
     while Pos2 < Len do
       begin
         pos1:=pos2;
         Pos2:=PosEx(Delimiter[delim],line,pos1+1);
         if pos2=0 then pos2:=len+1;
         Help:=AnsiMidStr(line,Pos1+1,Pos2-Pos1-1);
         Commandlist.Add(Help);
         if delim < dcount-1 then inc(delim);
       end;
   end
   else
     Commandlist.Add(line);
end;
:coder2:
das kannst du debuggen und dir den besten Teil raussuchen!
gruß
Jörg

mkinzler 17. Jan 2007 16:28

Re: Copybefehl bei Strings
 
Zitat:

Delphi-Quellcode:
 Commandlist := TStrings.Create;

würde ich besser mit
Delphi-Quellcode:
Commandlist := TStringList.Create;
ersetzen.

yörsch 18. Jan 2007 07:21

Re: Copybefehl bei Strings
 
Hallo mkinzler, :hello:
irgend einen Grund gab´s damals TStrings und nicht TStringList zu nehmen,
aber frag mich nicht heute nicht welche das war.

mkinzler 18. Jan 2007 07:27

Re: Copybefehl bei Strings
 
Zitat:

Zitat von yörsch
Hallo mkinzler, :hello:
irgend einen Grund gab´s damals TStrings und nicht TStringList zu nehmen,
aber frag mich nicht heute nicht welche das war.

TStrings ist abstrakt. Und TStringList ist eine Ableitung davon, in welcher implementiert wird. Beim Definieren reicht TStrings deshalb

Scorpion 20. Jan 2007 11:10

Re: Copybefehl bei Strings
 
Hey...

vielen dank für eure vielen antworten. Aber leider blicke ich noch nicht so ganz durch. Wie könnte das denn jetzt genau für mein Beispiel aussehen ?

vielen dank

Der_Unwissende 20. Jan 2007 11:33

Re: Copybefehl bei Strings
 
Hi,
ein Beispiel wurde doch schon gepostet. Du kannst mit der Funktion Pos bzw. PosEx Dir die Position von einem Teilstring in einem String ausgeben lassen (hier das Komma). Bei PosEx kannst Du zudem einen Offset angeben, so dass nur Zeichen hinter diesem Offset berücksichtigt werden. Copy kopiert wiederum einen Teilstring aus einem String heraus.
Du kannst also auf diese Art und Weise einen String anhand eines Trennzeichens in Token zerlegen, die werden in dem Beispiel in einer TStringList gespeichert. Das zweite Token wäre also der zweite Eintrag in der TStringList.

Etwas schneller (und einfacher) geht es dann noch, wenn Du auf eine fertige Lösung zurückgreifst, z.B. Explode. Lad Dir hier die Datei runter und binde die csExplode mit ein. Dort findest Du die Klasse TStringDivider, die das leistet was Du benötigst:

Delphi-Quellcode:
var token: TStringList;
    tokenizer: TStringDivider;
begin
  token := TStringList.Create;
  tokenizer := TStringDivider.Create;
  tokenizer.exlplode('Wort1,Wort2,Wort3,Wort4', ',', token);
end;
In Token würden jetzt die Strings 'Wort1', 'Wort2', 'Wort3' und 'Wort4' stehen. Token[0] wäre damit 'Wort1', Token[1] 'Wort2' usw.

Gruß Der Unwissende

Jelly 20. Jan 2007 11:39

Re: Copybefehl bei Strings
 
Wenn du deinen Kommatext in eine TStringlist lädst, kannst du die Eigenschaften DelimitedText und Delimiter nutzen. Etwa so

Delphi-Quellcode:
function Wort (S : string ; Nr : integer) : string ;
begin
     with TStringList.Create do begin
         try
             Delimiter := ',' ;
             DelimitedText := S ;
             if (Nr <= Count-1) and (Nr >= 0) then
                 Result := strings[Nr]
             else begin
                 Result := '' ;
                 raise exception.Create (format('Das Wort %d existiert nicht.',[Nr])) ;
             end ;
         finally
             free ;
         end ;
     end ;
end ;
Ist eventuell noch anpassungsfähig, grad was die Fehlerbehandlung betrifft


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:25 Uhr.
Seite 1 von 2  1 2      

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