Entwickler-Ecke
Sonstiges (Delphi) - Wieder Funktionen, ich lerne es nie ;(
Teddyman - Di 13.04.04 15:01
Titel: Wieder Funktionen, ich lerne es nie ;(
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.
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:
| 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;
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;
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;
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
Motzi: Delphi-Tags hinzugefügt.
raziel - Di 13.04.04 17:03
so (habs grad nich getestet..., wenns net funzt einfach nochma mit fehlermeldung melden ;-) ):
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
PhilGo - 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
bms - Di 13.04.04 17:35
Liebe Leute ich bitte euch.
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; |
PhilGo - Di 13.04.04 17:40
Oder so. :wink:
raziel - 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
bms - Di 13.04.04 20:11
Teddyman hat folgendes geschrieben: |
Ich will vier Seriennnummern eingeben ANS1 bis ANS4 und diese in eine Textdatei speichern. |
raziel - 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?
Inferno - Mi 14.04.04 14:55
hi
vielleicht so:
die funktion die das in ein file schreibt
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:
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
Peter Lustig: Code- durch Delphi-Tags ersetzt
bms - Mi 14.04.04 15:21
Wenn so, dann aber richtig:
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.
Inferno - Mi 14.04.04 15:29
@bms
ersten wollte ich den code jetzt ned so genau schreiben sonst hätte ich das schon mit
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
Peter Lustig: Code- durch Delphi-Tags ersetzt
bms - 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.
Inferno - 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 - 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?
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.
Inferno - 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:
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
Peter Lustig: Code- durch Delphi-Tags ersetzt
bms - 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.
bms - Mi 14.04.04 17:23
Inferno hat folgendes geschrieben: |
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
Peter Lustig: Code- durch Delphi-Tags ersetzt
Inferno - Do 15.04.04 13:48
wer lesen kann is klar im vorteil ;)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!