Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Anfänger möchte eine Datei erstellen (https://www.delphipraxis.net/8784-anfaenger-moechte-eine-datei-erstellen.html)

Andi 11. Sep 2003 23:19


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:

Christian Seehase 11. Sep 2003 23:25

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.

Ronny Grabo 11. Sep 2003 23:45

Re: Anfänger möchte eine Datei erstellen
 
Eine schnelle Variante wäre folgende :

Delphi-Quellcode:
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;
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).

Für das schnelle Auffinden :
TStringList (in der Delphi-Hilfe unter Suchen eingeben)
try...except (in der Delphi-Hilfe unter Suchen eingeben)

Nalincah 12. Sep 2003 07:55

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

Tom 12. Sep 2003 08:00

Re: Anfänger möchte eine Datei erstellen
 
Zitat:

Zitat von General2003
Versuchs mal mit INI-Dateien. Oder gibt das probleme mit excel?

Mit Sicherheit. Wie soll Excel eine INI-Datei interpretieren?

Zitat:

In Delphi kann man das auf jeden fall einfacher auslesen als die sache mit den Semikolons
Beides ist sehr einfach. TStringList ist ein mächtiges Instrument.

Ggf. ist es hier allerdings besser mit normalen Dateioperationen für Textdateien zu arbeiten.

Nalincah 12. Sep 2003 08:02

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?

Tom 12. Sep 2003 08:05

Re: Anfänger möchte eine Datei erstellen
 
Zitat:

Zitat von General2003
Aber das auslesen der Datei. Die muss doch erstmal zerstückelt werden um die in ne StringList zu packen, oder?

Siehe Dir mal TStringList an. Aus dem Kopf sage ich mal, da war was mit "CommaText". Abgesehen davon ist das Zerstückeln von Texten
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.

Andi 15. Sep 2003 00:22

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

johny 15. Sep 2003 14:20

Re: Anfänger möchte eine Datei erstellen
 
Das hier sollte funktionieren.
Delphi-Quellcode:
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;
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.
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.

johny 15. Sep 2003 14:47

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:
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;
Das sieht dann so aus:

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

Andi 15. Sep 2003 16:25

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]

Christian Seehase 15. Sep 2003 16:37

Re: Anfänger möchte eine Datei erstellen
 
Moin Andi,

Zitat:

Zitat von Andi
Das sieht mir jetzt nach "normalen" Datei-Operationen aus. Also ist doch richtig, daß man keine Stringlist braucht?!

Ist halt die Frage, was man als "normal" ansieht.
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]

Andi 17. Sep 2003 13:42

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

Christian Seehase 17. Sep 2003 15:11

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