Autor Beitrag
Teddyman
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 32



BeitragVerfasst: Di 13.04.04 15:01 
Hallo, da ich wirklich Anfänger bin, fällt ir einiges schwer. Ich bitte um euer Verständnis.
Und ich finde die Hilfe hier sehr gut, Danke.

Habe folgendes Problem:
Ich will vier Seriennnummern eingeben ANS1 bis ANS4 und diese in eine Textdatei speichern.
Wie kann ich den unten stehenden Code durch evtl. einer Funktion kürzen?
Danke.

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
//Seriennummer ANS1 eingeben
procedure TForm1.Edit2Exit(Sender: TObject);
var Text_Datei: TextFile;
    s:String;
begin
 AssignFile (Text_Datei, 'C:\Messwerte.txt');
 Append(Text_Datei);
 s := Edit2.Text;
 Writeln(Text_Datei,s+'  '+'ANS1');
 CloseFile(Text_Datei);
end;


//Seriennummer ANS2 eingeben
procedure TForm1.Edit3Exit(Sender: TObject);
var Text_Datei: TextFile;
    s:String;
begin
 AssignFile (Text_Datei, 'C:\Messwerte.txt');
 Append(Text_Datei);
 s := Edit3.Text;
 Writeln(Text_Datei,s+'  '+'ANS2');
 CloseFile(Text_Datei);
end;


//Seriennummer ANS3 eingeben
procedure TForm1.Edit4Exit(Sender: TObject);
var Text_Datei: TextFile;
    s:String;
begin
 AssignFile (Text_Datei, 'C:\Messwerte.txt');
 Append(Text_Datei);
 s := Edit4.Text;
 Writeln(Text_Datei,s+'  '+'ANS3');
 CloseFile(Text_Datei);
end;


//Seriennummer ANS4 eingeben
procedure TForm1.Edit5Exit(Sender: TObject);
var Text_Datei: TextFile;
    s:String;
begin
 AssignFile (Text_Datei, 'C:\Messwerte.txt');
 Append(Text_Datei);
 s := Edit5.Text;
 Writeln(Text_Datei,s+'  '+'ANS4');
 CloseFile(Text_Datei);
end;


Moderiert von user profile iconMotzi: Delphi-Tags hinzugefügt.
raziel
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2453

Arch Linux
JS (WebStorm), C#, C++/CLI, C++ (VS2013)
BeitragVerfasst: Di 13.04.04 17:03 
so (habs grad nich getestet..., wenns net funzt einfach nochma mit fehlermeldung melden ;-) ):

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TForm1.EditExit(Sender: TObject);
var Text_Datei: TextFile;
    sendername, s:String;
begin
   sendername := TButton(Sender).Name;
   AssignFile (Text_Datei, 'C:\Messwerte.txt');
   Append(Text_Datei);
   s := TButton(Sender).Text;
   Writeln(Text_Datei,s+sendername);
   CloseFile(Text_Datei);
end;

dieses Ereignis allen Edits zuweisen.
Evtl würd ich da jetzt noch die Edits umbenennen:
Edit2 in ANS1
Edit3 in ANS2, etc, da beim Speichern einfach der Name des entsprechenden Edits angehängt wird!


raziel

_________________
JSXGraph
PhilGo
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 315

Win 98, Win Longhorn ;-)

BeitragVerfasst: Di 13.04.04 17:15 
Oder du haust die ganzen Edit[1-5] 's in einen Stream und speicherst diesen in einer Datei.


Mfg PhilGo

_________________
Sie werden dich finden und töten... Söhne der großen Bärin!
bms
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 735

Win XP
Delphi 3, Delphi 6 PE, Delphi 2005 PE
BeitragVerfasst: Di 13.04.04 17:35 
Liebe Leute ich bitte euch.


ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
var 
  sl: TextFile; 
  s:String
var
  f = 'C:\Messwerte.txt';
begin 
  sl := TStringList.Create;
  try
    s := Edit2.Text; 
    sl.Add(s + ' ' + 'ANS1'); 
    s := Edit3.Text; 
    sl.Add(s + ' ' + 'ANS2'); 
    s := Edit4.Text; 
    sl.Add(s + ' ' + 'ANS3'); 
    s := Edit5.Text; 
    sl.Add(s + ' ' + 'ANS4'); 

    sl.SaveToFile(f);
  finally
    sl.Free;
  end;
end;

_________________
VORSICHT: Ich behersche seit heute die Fünf-Finger-Handflächen-Herz-Explodier-Schlag-Kampf-Technik >:(
PhilGo
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 315

Win 98, Win Longhorn ;-)

BeitragVerfasst: Di 13.04.04 17:40 
Oder so. :wink:

_________________
Sie werden dich finden und töten... Söhne der großen Bärin!
raziel
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2453

Arch Linux
JS (WebStorm), C#, C++/CLI, C++ (VS2013)
BeitragVerfasst: Di 13.04.04 20:07 
*hüstel*
das führt aber imho zu einem anderen ergebnis als bei teddyman!
bei dir werden die 4 ergebnisse in der datei gespeichert.
bei teddyman und mir wird jeweils das "angeklickte" ergebnis hintenrangehängt...


raziel

_________________
JSXGraph
bms
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 735

Win XP
Delphi 3, Delphi 6 PE, Delphi 2005 PE
BeitragVerfasst: Di 13.04.04 20:11 
Teddyman hat folgendes geschrieben:
Ich will vier Seriennnummern eingeben ANS1 bis ANS4 und diese in eine Textdatei speichern.

_________________
VORSICHT: Ich behersche seit heute die Fünf-Finger-Handflächen-Herz-Explodier-Schlag-Kampf-Technik >:(
raziel
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2453

Arch Linux
JS (WebStorm), C#, C++/CLI, C++ (VS2013)
BeitragVerfasst: Di 13.04.04 20:17 
Teddyman hat folgendes geschrieben:
Wie kann ich den unten stehenden Code durch evtl. einer Funktion kürzen?

ja, wie denn nu?

_________________
JSXGraph
Inferno
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 76



BeitragVerfasst: Mi 14.04.04 14:55 
hi

vielleicht so:


die funktion die das in ein file schreibt

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure WriteToFile(Text : string);
var Text_Datei: TextFile; 
begin 
  AssignFile(Text_Datei, 'C:\Messwerte.txt'); 
  Append(Text_Datei); 
  Writeln(Text_Datei, Text); 
  CloseFile(Text_Datei); 
end;


und hier 2 beispiel buttons:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TForm1.Edit3Exit(Sender: TObject); 
begin 
  WriteToFile(Edit3.Text + '  ' + 'ANS3'); 
end;

procedure TForm1.Edit2Exit(Sender: TObject); 
begin 
  WriteToFile(Edit2.Text + '  ' + 'ANS2'); 
end;

...


besser :)

mfg

Moderiert von user profile iconPeter Lustig: Code- durch Delphi-Tags ersetzt
bms
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 735

Win XP
Delphi 3, Delphi 6 PE, Delphi 2005 PE
BeitragVerfasst: Mi 14.04.04 15:21 
Wenn so, dann aber richtig:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
procedure WriteToFile(Text : string);
var
  Text_Datei: TextFile;
const
  Datei = 'C:\Messwerte.txt';
begin
  AssignFile(Text_Datei, Datei);
  try
    if FileExists(Datei)
      then Append(Text_Datei)
      else Rewrite(Text_Datei);
    Writeln(Text_Datei, Text);
  finally
    CloseFile(Text_Datei);
  end;
end;


Zuerst sollte die Datei geschlossen werde auch wenn ein Fehler vorkommt. Deshalb ist es besser es in finally Block zu packen. Dann gibt es eine mechtige Fehelermeldung wenn die Textdatei nicht existiert. Also sollte man zuerst prüfen ob die Datei bereits existiert. Wenn nicht, dann zuerst eine neue erstellen.

_________________
VORSICHT: Ich behersche seit heute die Fünf-Finger-Handflächen-Herz-Explodier-Schlag-Kampf-Technik >:(
Inferno
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 76



BeitragVerfasst: Mi 14.04.04 15:29 
@bms

ersten wollte ich den code jetzt ned so genau schreiben sonst hätte ich das schon mit

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
try  
  ...
except
  ...
end;


gemacht.

zweitens wieso willste die datei vorher zumachen, und warum schreibst du das du das willst und es dann aber gar nicht im quellcode stehen hast ??

mfg
Inferno

Moderiert von user profile iconPeter Lustig: Code- durch Delphi-Tags ersetzt
bms
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 735

Win XP
Delphi 3, Delphi 6 PE, Delphi 2005 PE
BeitragVerfasst: Mi 14.04.04 16:00 
Except ist falsch. Die Datei soll jedes mal geschlossen werden wenn die Prozedur zu ende ist. Nicht nur wenn es ein Fehler gibt, sondern immer. Und dafür gibt es Finally. Finally wir ausgeführt wenn es einen Fehler gibt, aber auch wenn es einen Fehler gibt. Also immer. Except nur wenn es einen Fehler gibt.

Die Datei sollte geschlossen werden weil sie das nächste mal wieder geöffnet wird. Sollange sie nicht geschlossen wird können kein anderen Programme in die Datei schreiben.

Und wieso hab ich es nicht im Quellcode stehen. Die Datei wird im Finally-Block geschlossen.

_________________
VORSICHT: Ich behersche seit heute die Fünf-Finger-Handflächen-Herz-Explodier-Schlag-Kampf-Technik >:(
Inferno
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 76



BeitragVerfasst: Mi 14.04.04 16:32 
bms hat folgendes geschrieben:

Zuerst sollte die Datei geschlossen werde auch wenn ein Fehler vorkommt. Deshalb ist es besser es in finally Block zu packen. Dann gibt es eine mechtige Fehelermeldung wenn die Textdatei nicht existiert. Also sollte man zuerst prüfen ob die Datei bereits existiert. Wenn nicht, dann zuerst eine neue erstellen.


Also zum einen hätte ich das closefile auch in den try block geschrieben von daher warum soll es da ned gehen.
zum anderen schreibst du ZUERST die datei schließen, deswegen frage ich einmal Warum und sagt das du es auch nicht machst ;)

Achja:
Bei try finally wird jeder block immer ausgeführt das heißt du musst auch jedesmal eine Fehlerbehandlung durchführen und die willste ja wohl ned ausser acht lassen, oder??
bei try except wird der except teil nur dann ausgeführt wenn ne exception auftrat und somit wird auch nur dann ne fehlerbehandlung gemacht und nicht jedesmal.

mfg

Inferno
bms
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 735

Win XP
Delphi 3, Delphi 6 PE, Delphi 2005 PE
BeitragVerfasst: Mi 14.04.04 17:03 
Mit "zuerst" meinte ich nicht nicht die erste Zeile, sondern "fangen wir mit der Aufzählung der Punkte an". Es ist also als ein wichiger Punkt gemeint. Jetzt verstanden? Ich galaube, daß alle anderen es verstanden haben.

Und jetzt das 1 mal 1 des Finally: ein Try Block ist kein Errorblock, sondern ein geschützter Block. Das hat nichts mit Fehlerbehandlung zu tun. Oder willst du behaupten, das das Fehlerbehandlung ist?

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
variable := typename.Create;
try

finally
  variable.Free;
end;


Finally ist der Bereich der immer ausgeführt wird. Auch wenn es zwischen try und finally einen Fehler gibt. Es muß aber nicht zum Fehler kommen. Finally sagt einfach aus, daß es gemacht werden muß. Except ist nur für Fehler. Wo siehst du aber im oberen Bereich eine Fehlerbehandlung?

Da tust du anscheinend jeden Menge durcheinander bringen.

_________________
VORSICHT: Ich behersche seit heute die Fünf-Finger-Handflächen-Herz-Explodier-Schlag-Kampf-Technik >:(
Inferno
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 76



BeitragVerfasst: Mi 14.04.04 17:10 
du kannst aber schon lesen oder???

ich hab doch geschrieben das der EXCEPT Block nur bei Exception ausgeführt wird. und deswegen auch nur dort die fehlerbehandlung rein muss, wobei sie bei try..finally immer mit geprüft werden muss.


ausserdem weiß ich nicht warum du mich so angehst ich wollte lediglich mich dazu äußern warum ich try..except benutze und du meinstest das das Falsch wäre.

noch was:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
variable := typename.Create; 
try 

finally 
  variable.Free; 
end;


was bringt diese zusammenstellung, sollte die variable nicht erstellt werden können, kann dir dein prog mit ner exception abkacken, und dann bringt es mir nix die var wieder freizugeben wenn sie noch nicht mal erstellt wurde ;)

mfg
Inferno

Moderiert von user profile iconPeter Lustig: Code- durch Delphi-Tags ersetzt
bms
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 735

Win XP
Delphi 3, Delphi 6 PE, Delphi 2005 PE
BeitragVerfasst: Mi 14.04.04 17:20 
Entschuldige bitte, aber ich weiß nicht wie ich weiter argumentiern kann ohne dir keine Kenntnis in dem Bereich zu bescheinigen. Warum diskutierst du überhaupt weiter? Warum machst du nicht einfach ein Beispiel und läufst in das Messer? In dem Beispiel oben ist kein Platz für Except. Verstehst du das nicht? CloseFile(Text_Datei) soll auf jeden Fall ausgeführt werden und deshalb muß es in ein Finally Block. Nicht in ein Except-Block. Lies dir bitte noch mal die Hilfe ausführlich durch bevor du dich nochmal meldest.

_________________
VORSICHT: Ich behersche seit heute die Fünf-Finger-Handflächen-Herz-Explodier-Schlag-Kampf-Technik >:(
bms
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 735

Win XP
Delphi 3, Delphi 6 PE, Delphi 2005 PE
BeitragVerfasst: Mi 14.04.04 17:23 
Inferno hat folgendes geschrieben:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
variable := typename.Create; 
try 

finally 
  variable.Free; 
end;


was bringt diese zusammenstellung, sollte die variable nicht erstellt werden können, kann dir dein prog mit ner exception abkacken, und dann bringt es mir nix die var wieder freizugeben wenn sie noch nicht mal erstellt wurde ;)


Es bringst schon was wenn der Fehler nicht beim Objekt liegt. Hier wird das Objekt immer freigegeben, ob es einen Fehler gab oder nicht. Beispiel: du lädst in ein StringList eine Textdatei die nicht existiert. Das führt dazu, daß die Prozedur abgebrochen wird.

Moderiert von user profile iconPeter Lustig: Code- durch Delphi-Tags ersetzt

_________________
VORSICHT: Ich behersche seit heute die Fünf-Finger-Handflächen-Herz-Explodier-Schlag-Kampf-Technik >:(
Inferno
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 76



BeitragVerfasst: Do 15.04.04 13:48 
wer lesen kann is klar im vorteil ;)