![]() |
Dateien
Hallo,
ich habe ein Problem: Wenn ich in einer Stinglist überprüfen lasse, ob in der 4. Zeile, die noch gar nicht existiert, "Testlizenz" steht, kommt die Fehlermeldung, dass ich das Maximum überschreite. Kann man da was machen? Oder kann man den Cursor in der Datei an eine von mir festgelegte Stelle setzen? Johannes013 :gruebel: |
Re: Dateien
Du kannst doch die Anzahl der Zeilen in der Stringlist mittels Count überprüfen. Index darf Count-1 nicht überschreiten.
|
Re: Dateien
Kannste mir ein einfaches bsp. nennen? ich bin anfänger und verstehe nicht sehr viel von der Delphi hilfe.
Johannes013 |
Re: Dateien
Hallo,
Anzahl der Einträge in einer String-List bekommst Du mit
Delphi-Quellcode:
jetzt kannst Du in einem Bereich von 0 bis n auf die StringList zugreifen
var
n : Integer; // Anzahl der Listeneinträge List : TStringList; begin n := List.Count -1; // -1, da der erste Index nicht 1 sondern 0 ist end; |
Re: Dateien
Heißt das, wenn der Eintrag "Test" in zeile 5 kommen soll, Zeile 5 noch nicht existiert, ist n=4.
ist das dann:
Delphi-Quellcode:
Dann kommt die Meldung: Index überschreitet das Maximum (4).
var
Datei:TextFile; n:Integer; List:TStringList; begin // Assign (...) und Stringlist benennen bzw. laden....... Append(Datei); Writeln(Datei, '1.'); Writeln(Datei, '2.'); Writeln(Datei, '3.'); Writeln(Datei, '4.'); // Writeln(Datei, 'Test'); CloseFile(Datei); if Copy(List[4],1,4)<>'Test' then Form1.color:=clred; end; |
Re: Dateien
hey, nichts weglassen im Code :zwinker:
Scheint so, also ob Du die StringListe lädst und danach erst die Datei mit Werten füllst? Liste mit 4 Elementen: Index = 0 - 3 Count = 4 Bei List[Index] und nur 4 Elementen in der Listen, ist List[4] auserhalb |
Re: Dateien
Delphi-Quellcode:
var
Datei:TextFile; n:Integer; List:TStringList; begin // Assign (...) Append(Datei); Writeln(Datei, '1.'); Writeln(Datei, '2.'); Writeln(Datei, '3.'); Writeln(Datei, '4.'); // Writeln(Datei, 'Test'); CloseFile(Datei); // Benennen bzw laden er List... if Copy(List[4],1,4)<>'Test' then Form1.color:=clred; List.Free; end; |
Re: Dateien
Das ist immer noch das selbe wie oben oder?
Versuch mal
Delphi-Quellcode:
Zeilen wie List.Add(text) oder der Inhalt der Datei, die mit List.LoadFromFile(file) geladen wird, das wäre interessant.
Copy(List[3], 1, 4)
Ich denke aber eigentlich, dass deine Frage schon von den anderen beantwortet wurde :stupid: |
Re: Dateien
Also wie oben beschrieben, List[4] greift auf das 5. Element zu.
Der Index von Listen startet bei 0, d.h. das erste Element ist List[0] und das letzte Element List[Count-1]. Der gepostete Code ist aber nicht alles, ich frage nur, weil neben assignFile auch ein List:TStringList.Create fehlt. |
Re: Dateien
:wiejetzt:
Delphi-Quellcode:
wie schlte ich die oben genannte Fehlermeldung aus?
var
Datei:TextFile; n:Integer; List:TStringList; begin // Assign (...) Append(Datei); Writeln(Datei, '1.'); Writeln(Datei, '2.'); Writeln(Datei, '3.'); Writeln(Datei, '4.'); // Writeln(Datei, 'Test'); CloseFile(Datei); // Benennen bzw laden er List... if Copy(List[4],1,4)<>'Test' then Form1.color:=clred; List.Free; end; |
Re: Dateien
ok. ich glaube ich stelle mich blöd.
andere Frage. wie kann ich in einer Stringlist oder Datei den Cursor an eine bestimmte Stelle setzen oder so eine Art Delete machen? :?: :wall: |
Re: Dateien
Zu Deiner ersten Frage:
Vielleicht liest Du nochmal ganz in Ruhe die 3-4 Posts durch. Dort ist alles detailliert beschrieben incl. Code-Beispiel. Deine Frage wurde also schon mehrmals genauesten beantwortet! ;) Zur zweiten Frage (eigentlich nur eine Frage pro Thread): Ganze Zeile löschen oder nur einzelne Zeichen einer Zeile? |
Re: Dateien
Naja eigentlich beides.
Evntuell zeichen und 'ne ganze Zeile. |
Re: Dateien
Zitat:
|
Re: Dateien
Wen es immer eine Textdatei ist, dann verwende immer die TStringList und verzichte ganz auf direkten Dateizugriff via AssignFile, Append, Writeln etc.
*** TStringList bringt fast alles mit, was Du brauchst
Delphi-Quellcode:
Sooo.. sollte sogar so funktionieren... also Code in einen Button kopieren und experimentieren.
var
List : TStringList; aString : String; begin List := TStringList.Create; if FileExists('Testdatei.txt') then List.LoadFromFile('Testdatei.txt'); List.Append('Das ist eine angehängte Textzeile.'); List.Append('Das ist auch eine angehängte Textzeile.'); List.Append('Das ist wieder eine angehängte Textzeile.'); ShowMessage(Format('Liste hat %d Zeilen.',[List.Count])); List.Delete(2); // Löscht Zeile 3! Index beginnt bei 0 ShowMessage(Format('Liste hat %d Zeilen.',[List.Count])); aString := List[0]; // Erste Zeile merken Delete(aString, 3,2); // Dort an 3. Position 2 Zeichen löschen List[0] := aString; // Zeile wieder in Liste List.SaveToFile('Testdatei.txt'); List.Free; end; |
Re: Dateien
Danke. Jetzt hab' ich's raus.
Löscht er vor der 3. Stelle oder nach der 3. Stelle 2 Zeichen? Jojo :glaskugel: |
Re: Dateien
Von der 3. Stelle an, also das 3 Zeichen ist das erste gelöschte. Denke mit "er" war Delete(aString, 3,2) gemeint.
Dann gleich nicht noch ein Tipp, Cursor auf das Wort und F1. Anders ausgedrückt, solche banalen Fragen sind dann sehr gut in der Delphi Hilfe beschrieben, meisten besser als wir hier mit ein paar Worten können (wollen). ;) |
Re: Dateien
danke. ich mag dieses Forum. :-D
Johannes013 :dancer2: PS: ich habe viele Fragen. Kannst ja ab und zu ma schauen. Du hast's toll erklärt. :thumb: :wink: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:08 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