Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Textdatei mit Inhalt erstellen (https://www.delphipraxis.net/121021-textdatei-mit-inhalt-erstellen.html)

Thendo 20. Sep 2008 20:16


Textdatei mit Inhalt erstellen
 
Hey,

mit CreateFile('Dateiname')

erstellt man ja eine Datei aber wie kann ich machen das wenn ich eine .txt erstelle da auch was drin steht?

calculon 20. Sep 2008 21:15

Re: Textdatei mit Inhalt erstellen
 
Delphi-Quellcode:
var
  MyStringList: TStringList;
begin
  MyStringList := TStringList.Create;
  try
    MyStringList.Add('dhekhg kwhckghwghucwr ');
    MyStringList.Add('guzwe vluizgwzw zcu5gz');
    MyStringList.SaveToFile('C:\rkjhgkrh.txt');
  finally
    MyStringList.Free
  end;
end;

omata 20. Sep 2008 21:19

Re: Textdatei mit Inhalt erstellen
 
Schau dir mal textfile, assignfile, reset, rewrite, append, truncate, readln, writeln und closefile an.

SirThornberry 20. Sep 2008 23:55

Re: Textdatei mit Inhalt erstellen
 
CreateFile ist die Funktion welche Windows anbietet auf Api-Basis. Als Anfänger ist man da aber recht schnell überfordert. Es ist aber auch nicht notwendig diese Funktion zu verwenden da Delphi einiges mitbringt. So zum Beispiel die Stringlist welche Methoden anbietet in Dateien zu schreiben, TFileStream zur Arbeit mit Dateien als nachfahre von TStream, die nicht objektrierentierten Funktionen AssignFile, Reset etc., TIniFile und einiges mehr.
Je nach dem was du vor hast ist das eine oder andere besser.
Wie du bereits mitbekommen hast bekommst du alle möglichen Varianten als Lösung was daran liegt das du uns nicht mitgeteilt hast was du genau machen willst.

@calculon: Es wäre sehr schön im Sinne einer Community wenn du auch ein paar Worte zu deinem geposteten Quelltext verlierst.

calculon 21. Sep 2008 11:46

Re: Textdatei mit Inhalt erstellen
 
Zitat:

Zitat von SirThornberry
@calculon: Es wäre sehr schön im Sinne einer Community wenn du auch ein paar Worte zu deinem geposteten Quelltext verlierst.

Okai, dann will ich das mal nachholen. TStringList ist eine Klasse aus der unit classes (wenn mich nicht alles täuscht). Der Vorteil -wie man am obigen Quellcode sieht- ist, dass es viele nützliche Methoden bereitstellt, um mit String Listen zu arbeiten. Nachteilig kann gesehen werden, dass es für nonVCL Anwendungen nicht benutzt werden kann. Alternativ wie hier schon genannt wurde, kann man mit der Kombination TextFile/AssignFile das selbe erreichen, aber das geht IMHO nicht so schnell von der Hand wie die Benutzung von StringLists.

Gruß
--

Apollonius 21. Sep 2008 11:53

Re: Textdatei mit Inhalt erstellen
 
Mit den Pascal-Routinen geht es ebenso schnell:
Delphi-Quellcode:
var f: Textfile;
begin
  AssignFile(f, 'C:\rkjhgkrh.txt');
  Rewrite(f);
  try
    Writeln(f, 'dhekhg kwhckghwghucwr ');
    Writeln(f, 'guzwe vluizgwzw zcu5gz');
  finally
    CloseFile(f);
  end;
end;

calculon 21. Sep 2008 12:01

Re: Textdatei mit Inhalt erstellen
 
Zitat:

Zitat von Apollonius
Mit den Pascal-Routinen geht es ebenso schnell: [..]

Ja, im Endeffekt ist es wahrscheinlich Geschmackssache. Ich finde es halt einfach sehr komfortabel, dass bei Objekten in Delphi nachdem man '.' drückt die Methoden vorgeschlagen werden (Autovervollständigung?); das spart mir Tipparbeit...

Gruß
--

omata 21. Sep 2008 14:29

Re: Textdatei mit Inhalt erstellen
 
Es gibt auch die Tastenkombination Strg + Leertaste. Allerdings muss man dann noch wissen was man tut bzw. braucht.

Thendo 21. Sep 2008 18:42

Re: Textdatei mit Inhalt erstellen
 
So danke für die Antworten :).

Hab jetzt geschafft das er eine Datei erstellt mit dem Text der Standartmäßig drinn sein soll!

Aber mein neues Problemm ist das er nicht den Text aus dem Edit1.Text nimmt und dan in die datei schreibt =(.

Delphi-Quellcode:
procedure TForm4.Button1Click(Sender: TObject);
var
  myFile : TextFile;
  text  : string;
  adresse : string;
begin

edit1.text := adresse;
  AssignFile(myFile, 'DATEINAME');
  ReWrite(myFile);

  WriteLn(myFile, 'STANDARTTEXT ', adresse); || Bei adresse soll der Text aus dem Edit1 hinkommen

  WriteLn(myFile);

  CloseFile(myFile);

  Reset(myFile);

  CloseFile(myFile);
end;
end.
Könnt mir bitte jemand sagen woran es liegt^^?

thkerkmann 21. Sep 2008 18:46

Re: Textdatei mit Inhalt erstellen
 
Zitat:

Zitat von Thendo
Delphi-Quellcode:
...
edit1.text := adresse;
...
Könnt mir bitte jemand sagen woran es liegt^^?

Andersrum:

Delphi-Quellcode:
   adresse := edit1.text;
Gruss

Thendo 21. Sep 2008 18:55

Re: Textdatei mit Inhalt erstellen
 
Omg -.-,

blöder Fehler xD

Danke Dir =D

taaktaak 21. Sep 2008 19:05

Re: Textdatei mit Inhalt erstellen
 
Zwei Anmerkungen:
1.
Delphi-Quellcode:
 CloseFile(myFile);

  Reset(myFile);

  CloseFile(myFile);
das Reset() und das 2te CloseFile() sind überflüssig

2. Normalerweise wäre der Code um eine minimlae Fehlerbehandlung zu ergänzen, also z.B.
Delphi-Quellcode:
 AssignFile(myFile,'DATEINAME');
 {$I-} rewrite(myFile); {$I+}
 if ioResult<>0 then ShowMessage('Fehler'
               else begin
  WriteLn(myFile, 'STANDARTTEXT ', adresse); || Bei adresse soll der Text aus dem Edit1 hinkommen
  WriteLn(myFile);
  end;

 CloseFile(myFile);

Apollonius 21. Sep 2008 19:24

Re: Textdatei mit Inhalt erstellen
 
Was soll das {$I-}? Wenn ich diesen Compilerschalter verwende, dann gebe ich im Fehlerfall eine aussagekräftige Fehlermeldung aus. Ansonsten kann man die Exception durchreichen. Wie das mit Try-Finally funktioniert, habe ich ja weiter oben gezeigt.

Thendo 21. Sep 2008 19:36

Re: Textdatei mit Inhalt erstellen
 
Zitat:

Zitat von taaktaak
Zwei Anmerkungen:
1.
Delphi-Quellcode:
 CloseFile(myFile);

  Reset(myFile);

  CloseFile(myFile);
das Reset() und das 2te CloseFile() sind überflüssig

2. Normalerweise wäre der Code um eine minimlae Fehlerbehandlung zu ergänzen, also z.B.
Delphi-Quellcode:
 AssignFile(myFile,'DATEINAME');
 {$I-} rewrite(myFile); {$I+}
 if ioResult<>0 then ShowMessage('Fehler'
               else begin
  WriteLn(myFile, 'STANDARTTEXT ', adresse); || Bei adresse soll der Text aus dem Edit1 hinkommen
  WriteLn(myFile);
  end;

 CloseFile(myFile);

Zu 1:
Habs rausgetan^^

Zu 2:
Könntest du bitte erklären was das bringt^^??
Blicke ich iwi nicht durch^^


Und hab noch ne Frage^^
wenn ich jetzt eine If Schleife mit ShellExcute mache:

Delphi-Quellcode:
if Checkbox1.Checked then
  ShellExecute(Handle, nil, 'DATEI.exe', nil, nil, SW_SHOW);
end;
Wie kann ich dem jetzt sagen das die datei in der variable:ordner (text aus Edit2) liegt?

mkinzler 21. Sep 2008 19:39

Re: Textdatei mit Inhalt erstellen
 
Zitat:

wenn ich jetzt eine If Schleife mit ShellExcute mache:
Es gibt keine If-Schleifen!

Delphi-Quellcode:
ShellExecute(Handle, nil, PChar( Edit2.Text), nil, nil, SW_SHOW);

Thendo 21. Sep 2008 19:42

Re: Textdatei mit Inhalt erstellen
 
Zitat:

Zitat von mkinzler
Zitat:

wenn ich jetzt eine If Schleife mit ShellExcute mache:
Es gibt keine If-Schleifen!

Delphi-Quellcode:
ShellExecute(Handle, nil, PChar( Edit2.Text), nil, nil, SW_SHOW);

ich mein das man im Edit2 einen Pfad angibt zu einem Ordner ( z.b= C:\Programme\Blub ) und das der dan aus dem Ordner die Datei startet

mkinzler 21. Sep 2008 19:44

Re: Textdatei mit Inhalt erstellen
 
Dann halt:
Delphi-Quellcode:
ShellExecute(Handle, nil, PChar( Edit2.Text)+'\'+Dateiname, nil, nil, SW_SHOW);
Aber ein spezieller Dateidialog wäre wohl eher geignet

taaktaak 21. Sep 2008 19:45

Re: Textdatei mit Inhalt erstellen
 
zu 1) Nun, was bringt eine Fehlerbehandlung? Du hast damit als Programmierer die Möglichkeit, dem Nutzer einen ausführlicheren/gezielteren Hinweis auf einen Fehler zu geben, als es das Betriebssystem kann. Übergebe doch im AssignFile() mal einen Dateinamen mit Angabe eines Laufwerks, dass es bei dir nicht gibt. Dann führe den Code mal mit und mal ohne Fehlerbehandlung aus, dann erkennst du den Unterschied.

zu 2) schon beantwortet :P

Thendo 21. Sep 2008 19:54

Re: Textdatei mit Inhalt erstellen
 
Zitat:

Zitat von mkinzler
Dann halt:
Delphi-Quellcode:
ShellExecute(Handle, nil, PChar( Edit2.Text)+'\'+Dateiname, nil, nil, SW_SHOW);
Aber ein spezieller Dateidialog wäre wohl eher geignet


Was meinst du mit Dateidialog?

Maan scho wieder en Prob =(

Wie bezeichne ich einen Dateiname xD?

DeddyH 21. Sep 2008 19:57

Re: Textdatei mit Inhalt erstellen
 
Schau mal in der Hilfe nach SelectDirectory, das ist sowas.

mkinzler 21. Sep 2008 19:58

Re: Textdatei mit Inhalt erstellen
 
Zitat:

Was meinst du mit Dateidialog?
TOpenDialog
Zitat:

Wie bezeichne ich einen Dateiname xD?
So wie die datei heissen soll.

Thendo 21. Sep 2008 20:22

Re: Textdatei mit Inhalt erstellen
 
Hab jetzt die Datei bezeichnet

Delphi-Quellcode:
  Death : string;
(Hoff ist so richtig xD)

Delphi-Quellcode:
if Checkbox1.Checked then
 ShellExecute(Handle, nil, PChar( Edit2.Text)+'\'+Death.exe, nil, nil, SW_SHOW);
end;
NuN bekomm ich aber wieder einen Fehler: :wall: :wall:

Zitat:

[DCC Fehler] Unit4.pas(60): E2018 Record, Objekt oder Klassentyp erforderlich
Wie kann ich den beheben?^^

mkinzler 21. Sep 2008 20:25

Re: Textdatei mit Inhalt erstellen
 
Delphi-Quellcode:
ShellExecute(Handle, nil, PChar( Edit2.Text+'\Death.exe'), nil, nil, SW_SHOW);

taaktaak 21. Sep 2008 20:32

Re: Textdatei mit Inhalt erstellen
 
In diesem Fall ist die Variablendeklaration unnötig.
Sie macht nur Sinn, wenn du z.B. so vorgehst:

Delphi-Quellcode:
var Death : String;
//..
Death:='death.exe';
ShellExecute(Handle, nil, PChar( Edit2.Text+'\'+Death), nil, nil, SW_SHOW);
//..

DeddyH 21. Sep 2008 20:34

Re: Textdatei mit Inhalt erstellen
 
Und wenn man dann noch berücksichtigt, dass das Edit evtl. den Backslash bereits enthalten könnte und den Rückgabewert von ShellExecute auswertet, wird das so langsam rund :zwinker:

mkinzler 21. Sep 2008 20:36

Re: Textdatei mit Inhalt erstellen
 
Zitat:

Und wenn man dann noch berücksichtigt, dass das Edit evtl. den Backslash bereits enthalten könnte
Aber nicht muss

SirThornberry 21. Sep 2008 20:37

Re: Textdatei mit Inhalt erstellen
 
Ich mach hier mal zu da die erste Frage geklärt ist. Für die zweite bitte ich ein neues Thema zu eröffnen damit die Übersichtlichkeit nicht verloren geht.

*** geschlossen ***


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:51 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz