![]() |
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 |
Re: Copybefehl bei Strings
Versuchs doch mal mit PosEx :P
[edit=SirThornberry]Funktionsnamenschreibweise geändert :roll: Mfg, SirThornberry[/edit] |
Re: Copybefehl bei Strings
Oder mit Hilfe einer Stringliste
|
Re: Copybefehl bei Strings
versuchs mal damit
Delphi-Quellcode:
:coder2:
// 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; das kannst du debuggen und dir den besten Teil raussuchen! gruß Jörg |
Re: Copybefehl bei Strings
Zitat:
Delphi-Quellcode:
ersetzen.
Commandlist := TStringList.Create;
|
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. |
Re: Copybefehl bei Strings
Zitat:
|
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 |
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. ![]()
Delphi-Quellcode:
In Token würden jetzt die Strings 'Wort1', 'Wort2', 'Wort3' und 'Wort4' stehen. Token[0] wäre damit 'Wort1', Token[1] 'Wort2' usw.
var token: TStringList;
tokenizer: TStringDivider; begin token := TStringList.Create; tokenizer := TStringDivider.Create; tokenizer.exlplode('Wort1,Wort2,Wort3,Wort4', ',', token); end; Gruß Der Unwissende |
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:
Ist eventuell noch anpassungsfähig, grad was die Fehlerbehandlung betrifft
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 ; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:25 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