![]() |
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:
[edit=SirThornberry] Code-Tags durch Delphi-Tags ersetzt - Mfg, SirThornberry[/edit]
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; |
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:
Und hier wäre unklar wo das Ergebnis hinn soll.
delete(Stringliste.GetString(Index));
|
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:
Pos(':',sl[ZeilenNr])+1
sl[ZeilenNr] := Copy(sl[ZeilenNr],Pos(':',sl[ZeilenNr])+1,MaxInt);
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. |
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:
hat alles geklappt,
sl[ZeilenNr] := Copy(sl[ZeilenNr],Pos(':',sl[ZeilenNr])+1,MaxInt);
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