Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Dateien (https://www.delphipraxis.net/135358-dateien.html)

Johannes013 9. Jun 2009 16:34


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:

Phoenix 9. Jun 2009 16:36

Re: Dateien
 
Du kannst doch die Anzahl der Zeilen in der Stringlist mittels Count überprüfen. Index darf Count-1 nicht überschreiten.

Johannes013 9. Jun 2009 16:39

Re: Dateien
 
Kannste mir ein einfaches bsp. nennen? ich bin anfänger und verstehe nicht sehr viel von der Delphi hilfe.




Johannes013

markus5766h 9. Jun 2009 16:53

Re: Dateien
 
Hallo,

Anzahl der Einträge in einer String-List bekommst Du mit
Delphi-Quellcode:
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;
jetzt kannst Du in einem Bereich von 0 bis n auf die StringList zugreifen

Johannes013 9. Jun 2009 17:19

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:
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;
Dann kommt die Meldung: Index überschreitet das Maximum (4).

Satty67 9. Jun 2009 17:25

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

Johannes013 9. Jun 2009 17:29

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;

wicht 9. Jun 2009 17:32

Re: Dateien
 
Das ist immer noch das selbe wie oben oder?
Versuch mal

Delphi-Quellcode:
Copy(List[3], 1, 4)
Zeilen wie List.Add(text) oder der Inhalt der Datei, die mit List.LoadFromFile(file) geladen wird, das wäre interessant.
Ich denke aber eigentlich, dass deine Frage schon von den anderen beantwortet wurde :stupid:

Satty67 9. Jun 2009 17:35

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.

Johannes013 9. Jun 2009 17:42

Re: Dateien
 
:wiejetzt:

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;
wie schlte ich die oben genannte Fehlermeldung aus?

Johannes013 9. Jun 2009 17:46

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:

Satty67 9. Jun 2009 17:48

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?

Johannes013 9. Jun 2009 17:54

Re: Dateien
 
Naja eigentlich beides.

Evntuell zeichen und 'ne ganze Zeile.

Namenloser 9. Jun 2009 17:57

Re: Dateien
 
Zitat:

wie kann ich in einer Stringlist oder Datei den Cursor an eine bestimmte Stelle setzen oder so eine Art Delete machen?
Die Arbeitsweise einer Stringlist ist eine andere als die der Datei-Funktionen. So etwas wie einen "Cursor" hat die Stringlist gar nicht. Du kannst nur mit den Stringfunktionen Copy, Delete, Insert usw. so etwas simulieren.

Satty67 9. Jun 2009 18:05

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:
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;
Sooo.. sollte sogar so funktionieren... also Code in einen Button kopieren und experimentieren.

Johannes013 9. Jun 2009 18:46

Re: Dateien
 
Danke. Jetzt hab' ich's raus.

Löscht er vor der 3. Stelle oder nach der 3. Stelle 2 Zeichen?


Jojo


:glaskugel:

Satty67 9. Jun 2009 18:53

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). ;)

Johannes013 9. Jun 2009 18:58

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