![]() |
Anfänger möchte eine Datei erstellen
Hallo!
Ich möchte eine Datei erstellen z.B. "Test.txt" Ich habe einen Button und eine Variable , deren Inhalt sich ständig ändert. Wenn ich auf den Button clicke, soll eine Datei erstellt werden " Test.txt", in die dann der Inhalt der Variable gespeichert wird. Wenn ich den Button wieder drücke, dann soll der sich mittlerweile geänderte Variablenwert in die selbe Datei gespeichert werden und unter den ersten Eintrag geschrieben werden, so daß es eine Art Liste wird, die immer grösser wird, eine Art Protokoll. Später möchte ich dann zu jedem Eintrag(also Variablenwert) noch Datum und Uhrzeit dazu haben. Eine laufende Nummer wäre auch ganz gut am Anfang. Z.B. so 1;Variablenwert;Datum;Uhrzeit nach dem 2. Click dann so: 1;Variablenwert;datum;Uhrzeit; 2;Variablenwert;datum;Uhrzeit; Die Semikolons möchte ich haben, damit man das später mal in Excel haben kann. Die Datei soll sich also immer Erweitern. Vorher soll man aber noch den Dateinamen dieser "Protokolldatei" eingeben können. und sie soll max. 65536 Linien lang sein können. ISt so etwas möglich? Ich habe nie mit dateien gearbeitet und möchte Anhand dieses Beispiels gerne lernen. Könnt Ihr mir Starthilfe geben oder Links zu ein paat TUTs, damit ich loslegen kann? Besten Dank! sagt Andi :chat: |
Re: Anfänger möchte eine Datei erstellen
Moin Andi,
da ich mal davon ausgehe, dass Du eine Zeile wie von Dir beschrieben, hinbekommst, kann ich Dir empfehlen Dich mal mit TStringList zu beschäftigen. Falls Du die schon kennst, und/oder es gerne "eleganter" haben möchtest wäre als nächstes wohl TFileStream sinnvoll. Zu beiden Themen solltest Du sowohl in der Hilfe, als auch hier viele Beispiele finden. |
Re: Anfänger möchte eine Datei erstellen
Eine schnelle Variante wäre folgende :
Delphi-Quellcode:
Wenn es nur um eine Protokollfunktion geht, kann man Daten an die StringListe anhängen und anschließend beim Form.OnClose Ereignis speichert man das ganze ab und gibt die Liste wieder frei. Natürlich mittels einer try ... except - Klausel (siehe OH / Delphi Hilfe).
procedure TForm1.Button1Click(Sender: TObject);
var Testlst:TStringList; var TestString:String; begin //String wird initialisiert TestString:='Inhalt der Testvariable'; //StringListe wird erstellt Testlst:=TStringList.Create; //Variable Teststring wird der Stringliste übergeben Testlst.Add(TestString); //StringListe wird gespeichert Testlst.SaveToFile('test.txt'); //Stringliste wird freigegeben Testlst.Free; end; Für das schnelle Auffinden : TStringList (in der Delphi-Hilfe unter Suchen eingeben) try...except (in der Delphi-Hilfe unter Suchen eingeben) |
Re: Anfänger möchte eine Datei erstellen
Versuchs mal mit INI-Dateien. Oder gibt das probleme mit excel?
In Delphi kann man das auf jeden fall einfacher auslesen als die sache mit den Semikolons |
Re: Anfänger möchte eine Datei erstellen
Zitat:
Zitat:
Ggf. ist es hier allerdings besser mit normalen Dateioperationen für Textdateien zu arbeiten. |
Re: Anfänger möchte eine Datei erstellen
Aber das auslesen der Datei. Die muss doch erstmal zerstückelt werden um die in ne StringList zu packen, oder?
|
Re: Anfänger möchte eine Datei erstellen
Zitat:
1) hier nicht notwendig, da die Datei erstellt werden soll 2) ist es die eine Basis der Programmierung Strings ver-/bearbeiten zu können und die notwendigen Methoden Kleinkram. |
Re: Anfänger möchte eine Datei erstellen
Hi!
Dankeschön für Eure Tips! @christian seehase: Leider krieg ich das nicht hin mit meiner Zeile. Ich habe den Code mal von Ronny Grabo ausprobiert. Es funktioniert und die Datei wird angelegt.Wenn ich aber wieder auf meinen Button drücke , dann wird der Wert nicht angehängt, sondern überschrieben. Das wollte ich ja eigentlich nicht.Was muss ich tun, damit der Wert angehängt wird? Ach ja und kann mir jemand nen Tip geben, wie man das mit der laufenden Nummer , datum und Uhrzeit hinbekommt? ich habe es so versucht , bekomme aber Fehlermeldungen Teststring:=laufendenummer,meinwert; (datum und Uhrzeit weiss ich noch nicht, wie man das einlesen kann) Die laufende nummer soll sich bei jedem Klick addieren, deshalb mach ich: Zahl:=Zahl + 1; und danach wandle ich den Integer Typen "Zahl" in einen String "laufendenummer" , die dann ja auch ausgegeben werden soll. also laufendenummer:=inttostr(zahl); Ich möchte halt beide String-Variablen in meine Teststring-Variable packen, ich denke ich tippe da was falsch.Bei Turbo-pascal konnte man das meiner Meinung nach so machen. Danke nochmals! MfG ANDI |
Re: Anfänger möchte eine Datei erstellen
Das hier sollte funktionieren.
Delphi-Quellcode:
DenWert der Variable sVariable habe ich au 'Test' festgelegt. Den kannst du natürlich im Programm ändern, dann wird auch der veränderte Wert übernommen und in die Text-Datei geschrieben.
procedure TForm1.Button1Click(Sender: TObject);
var LogFile: TextFile; sVariable : string; begin sVariable := 'Test'; AssignFile(LogFile, 'Test.txt'); if FileExists('Test.txt') then Append(LogFile) else Rewrite(LogFile); // create the file if necessary try WriteLn(LogFile, sVariable); finally CloseFile(LogFile); end; end; So, jetzt fehlt nur noch die laufende Nummer und das Datum. Das sollte aber auch zu schaffen sein. Allerdings muss man für die Nummer die Anzahl der Zeilen ermitteln oder (was noch besser ist) die alte Nummer auslesen und erhöhen. |
Re: Anfänger möchte eine Datei erstellen
So, ich habe den Quelltext noch etwas erweitert. Jetzt wird das Datum, die Systemzeit und der Inhalt der Variable protokolliert:
Delphi-Quellcode:
Das sieht dann so aus:
procedure TForm1.Button1Click(Sender: TObject);
var LogFile: TextFile; sVariable : string; sDate : string; sTime : string; begin sDate := DateToStr(Now); sTime := TimeToStr(Now); sVariable := 'Test'; AssignFile(LogFile, 'Test.txt'); if FileExists('Test.txt') then Append(LogFile) else Rewrite(LogFile); // create the file if necessary try WriteLn(LogFile, sDate + ' ' + sTime + ' ' + sVariable); finally CloseFile(LogFile); end; end;
Code:
15.09.2003 15:44:15 Test
15.09.2003 15:44:16 Test 15.09.2003 15:44:17 Test 15.09.2003 15:45:52 Test 15.09.2003 15:45:53 Test 15.09.2003 15:45:55 Test |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:48 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 by Thomas Breitkreuz