Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi String nach Zeichen absuchen und davor alles löschen (https://www.delphipraxis.net/104827-string-nach-zeichen-absuchen-und-davor-alles-loeschen.html)

poker1337 11. Dez 2007 14:23


String nach Zeichen absuchen und davor alles löschen
 
Hallo!

Ich beschäftige mich gerade mit Textdateien und ähnlichem, und jetzt bin ich auf ein Problem gestoßen!

Die textdatei enthält foldendes:

abcdefg:xuxxxx:xxxxxx
eerrr:xxxxxxx:xxxxaaa
ooooo:osssosoa:sspapqpq
assas:soapqw:ioadsiod

usw.

Ich habe die Textdatei mit sl.Loadfromfile erfolgreich geladen,
und mit der Funktion "for zeilennr:=0 to sl.Count-1 do" lasse ich die Textdatei Zeile für Zeile
durchsuchen!

Mittels POS() suche ich dann das erste ':', denn ich will das erste ':' finden
und alles was DAVOR steht löschen.
Die Position findet er, nur wie geht es weiter?
Mit delete(sl[zeilennr], 1 , posi);
kriege ich diesen Error:

[DCC Fehler] Unit2.pas(64): E2197 Konstantenobjekt kann nicht als Var-Parameter weitergegeben werden

Ich weiß nicht warum, vll kann mir hier einer helfen
oder einen anderen Ansatz vorschlagen und ggf. wie ich das anders mit ner Textfile handle.

Code habe ich hier:
sl: TStringlist
zeilennr: Integer
posi: Integer

Delphi-Quellcode:
 for zeilennr:=0 to sl.Count-1 do

            begin
                Memo1.Lines.Add(sl[zeilennr]);
               
            posi := POS(':', sl[zeilennr]);
            delete(sl[zeilennr], 1 , posi);
            Memo2.Lines.Add(sl[zeilennr]);

            end;
         finally
            sl.free; //Objekt wieder freigeben
        end;
[edit=SirThornberry] Code-Tags durch Delphi-Tags ersetzt - Mfg, SirThornberry[/edit]

SirThornberry 11. Dez 2007 14:29

Re: String nach Zeichen absuchen und davor alles löschen
 
delete erwartet einen string den es ändern kann (also intern die Adresse wo der String steht). Du übergibst allerdings TStringList.Strings[i] und das ist ein Property. Dahinter kann sich also eine Funktion verbergen. Du musst also das Funktionsergebnis auf einen String zuweisen, den String der Delete-Funktion übergeben und dann den String zurück schreiben.

du versuchst im Moment also folgendes aufzuführen:
Delphi-Quellcode:
delete(Stringliste.GetString(Index));
Und hier wäre unklar wo das Ergebnis hinn soll.

Christian Seehase 11. Dez 2007 14:35

Re: String nach Zeichen absuchen und davor alles löschen
 
Moin Poker,

erst einmal herzlich willkommen hier in der Delphi-PRAXiS.

Mit Delete funktioniert es nicht, da die Eigenschaft Strings einer TStringList keine Variable ist.
(Weil Strings die Default-Eigenschaft einer TStringList ist muss man sie nicht mitschreiben, sondern direkt sl[Index] schreiben, statt sl.Strings[Index])

Du könntest Dir mit Copy behelfen, z.B. so:

Delphi-Quellcode:
sl[ZeilenNr] := Copy(sl[ZeilenNr],Pos(':',sl[ZeilenNr])+1,MaxInt);
Pos(':',sl[ZeilenNr])+1
damit der Abschnitt hinter dem : angesprochen wird, und

MaxInt
weil der Rest des Strings übertragen werden soll, und Copy automatisch aufhört, wenn der String zu Ende ist. Man muss in diesem Falle also nicht berechnen, wie lang der String ist, der kopiert werden soll.

poker1337 11. Dez 2007 14:43

Re: String nach Zeichen absuchen und davor alles löschen
 
Wow!
Danke für die schnelle Antwort!
Und dann direkt 2 :mrgreen:

Mit
Delphi-Quellcode:
sl[ZeilenNr] := Copy(sl[ZeilenNr],Pos(':',sl[ZeilenNr])+1,MaxInt);
hat alles geklappt,
Vielen Dank!


Hab jetzt noch ne frage:

Wie kann ich dann das zweite mit dem dritten vertauschen?


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:13 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