![]() |
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 |
Re: Anfänger möchte eine Datei erstellen
Danke!
Hätt nicht gedacht, daß es so simpel sein kann! Hatte gestern Nacht noch rumprobiert , und meinen String auch hinbekommen, nur keine Uhrzeit und Datum, aber das klappt Dank Euch jetzt! Das sieht mir jetzt nach "normalen" Datei-Operationen aus. Also ist doch richtig, daß man keine Stringlist braucht?! Jedenfalls wollte ich mich hiermit recht herzlich bedanken!!! :hello: MfG Andi [edit=Christian Seehase]Vier Doppelpostings gelöscht. Mfg, Christian Seehase[/edit] |
Re: Anfänger möchte eine Datei erstellen
Moin Andi,
Zitat:
Für diesen Fall wäre eine Stringlist wahrscheinlich einfacher zu handhaben. Ob AssignFile usw. als "normal" anzusehen ist, ist dann auch wieder eine andere Frage. Manche benutzen es, eventuell noch aus "alter Gewohnheit" (Turbo Pascal), andere TFileStream (sozusagen eine modernisierte Fassung mit mehr Möglichkeiten), wieder andere die API Funktionen. Alle drei Varianten greifen natürlich, letztendlich, auf die API Funktionen zurück. [EDIT] Wie hast Du es eigentlich hinbekommen fünfmal den gleichen Beitrag zu posten? :mrgreen: [/EDIT] |
Re: Anfänger möchte eine Datei erstellen
Hallo!
Das mit den 4 Postings tut mir sehr leid, war keine Absicht! Meine Internetverbindung hat irgendwie "abgespackt" , es tat sich nichts mehr , so als ob er irgendwie keine Daten mehr empfängt und sendet. Der blaue Balken hatte Minuten gebraucht, damit etwas passiert.Also nochmal sorry!! Yo! Bin mit Turbo Pascal angefangen im alten DOS-Modus! Nochmal besten Dank an alle!!! MfG Andi |
Re: Anfänger möchte eine Datei erstellen
Moin Andi,
kein Problem. Bislang waren, wenn ich mich nicht sehr irre, 3 gleiche Postings Spitzenreiter :mrgreen: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:56 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