Autor |
Beitrag |
Teddyman
      
Beiträge: 32
|
Verfasst: 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.
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
      
Beiträge: 2453
Arch Linux
JS (WebStorm), C#, C++/CLI, C++ (VS2013)
|
Verfasst: 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
_________________ JSXGraph
|
|
PhilGo
      
Beiträge: 315
Win 98, Win Longhorn ;-)
|
Verfasst: 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
      
Beiträge: 735
Win XP
Delphi 3, Delphi 6 PE, Delphi 2005 PE
|
Verfasst: 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; |
_________________ VORSICHT: Ich behersche seit heute die Fünf-Finger-Handflächen-Herz-Explodier-Schlag-Kampf-Technik >
|
|
PhilGo
      
Beiträge: 315
Win 98, Win Longhorn ;-)
|
Verfasst: Di 13.04.04 17:40
Oder so. 
_________________ Sie werden dich finden und töten... Söhne der großen Bärin!
|
|
raziel
      
Beiträge: 2453
Arch Linux
JS (WebStorm), C#, C++/CLI, C++ (VS2013)
|
Verfasst: 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
      
Beiträge: 735
Win XP
Delphi 3, Delphi 6 PE, Delphi 2005 PE
|
Verfasst: 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
      
Beiträge: 2453
Arch Linux
JS (WebStorm), C#, C++/CLI, C++ (VS2013)
|
Verfasst: 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
      
Beiträge: 76
|
Verfasst: 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
      
Beiträge: 735
Win XP
Delphi 3, Delphi 6 PE, Delphi 2005 PE
|
Verfasst: 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.
_________________ VORSICHT: Ich behersche seit heute die Fünf-Finger-Handflächen-Herz-Explodier-Schlag-Kampf-Technik >
|
|
Inferno
      
Beiträge: 76
|
Verfasst: 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
      
Beiträge: 735
Win XP
Delphi 3, Delphi 6 PE, Delphi 2005 PE
|
Verfasst: 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
      
Beiträge: 76
|
Verfasst: 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
      
Beiträge: 735
Win XP
Delphi 3, Delphi 6 PE, Delphi 2005 PE
|
Verfasst: 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.
_________________ VORSICHT: Ich behersche seit heute die Fünf-Finger-Handflächen-Herz-Explodier-Schlag-Kampf-Technik >
|
|
Inferno
      
Beiträge: 76
|
Verfasst: 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
      
Beiträge: 735
Win XP
Delphi 3, Delphi 6 PE, Delphi 2005 PE
|
Verfasst: 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
      
Beiträge: 735
Win XP
Delphi 3, Delphi 6 PE, Delphi 2005 PE
|
Verfasst: Mi 14.04.04 17:23
_________________ VORSICHT: Ich behersche seit heute die Fünf-Finger-Handflächen-Herz-Explodier-Schlag-Kampf-Technik >
|
|
Inferno
      
Beiträge: 76
|
Verfasst: Do 15.04.04 13:48
wer lesen kann is klar im vorteil 
|
|