AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Copybefehl bei Strings

Ein Thema von Scorpion · begonnen am 17. Jan 2007 · letzter Beitrag vom 20. Jan 2007
Antwort Antwort
Seite 1 von 2  1 2      
Scorpion

Registriert seit: 3. Nov 2002
Ort: Flörsheim
154 Beiträge
 
Delphi 5 Professional
 
#1

Copybefehl bei Strings

  Alt 17. Jan 2007, 16:10
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
Gruß Nico
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Copybefehl bei Strings

  Alt 17. Jan 2007, 16:14
Versuchs doch mal mit PosEx

[edit=SirThornberry]Funktionsnamenschreibweise geändert Mfg, SirThornberry[/edit]
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Copybefehl bei Strings

  Alt 17. Jan 2007, 16:15
Oder mit Hilfe einer Stringliste
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von yörsch
yörsch

Registriert seit: 10. Jan 2007
Ort: Lampertheim
206 Beiträge
 
Delphi XE2 Architect
 
#4

Re: Copybefehl bei Strings

  Alt 17. Jan 2007, 16:20
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;

das kannst du debuggen und dir den besten Teil raussuchen!
gruß
Jörg
Jörg
have FUN
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Copybefehl bei Strings

  Alt 17. Jan 2007, 16:28
Zitat:
 Commandlist := TStrings.Create;
würde ich besser mit Commandlist := TStringList.Create; ersetzen.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von yörsch
yörsch

Registriert seit: 10. Jan 2007
Ort: Lampertheim
206 Beiträge
 
Delphi XE2 Architect
 
#6

Re: Copybefehl bei Strings

  Alt 18. Jan 2007, 07:21
Hallo mkinzler,
irgend einen Grund gab´s damals TStrings und nicht TStringList zu nehmen,
aber frag mich nicht heute nicht welche das war.
Jörg
have FUN
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Copybefehl bei Strings

  Alt 18. Jan 2007, 07:27
Zitat von yörsch:
Hallo mkinzler,
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
Markus Kinzler
  Mit Zitat antworten Zitat
Scorpion

Registriert seit: 3. Nov 2002
Ort: Flörsheim
154 Beiträge
 
Delphi 5 Professional
 
#8

Re: Copybefehl bei Strings

  Alt 20. Jan 2007, 11:10
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
Gruß Nico
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#9

Re: Copybefehl bei Strings

  Alt 20. Jan 2007, 11:33
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
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#10

Re: Copybefehl bei Strings

  Alt 20. Jan 2007, 11:39
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:12 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz