| Autor |
Beitrag |
Vamos
      
Beiträge: 44
|
Verfasst: Mi 02.09.09 21:19
Hallo Ihr Lieben,
ich habe folgendes problem, ich möchte Informationen zeilenweise in eine bestehende txt schreiben, wobei diese dabei überschrieben werden darf und soll.
Mein Quellcode:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| procedure TForm1.BRestartActionClick(Sender: TObject); var f : Textfile; check: Tcomponent; i :integer; begin For i:=ComponentCount-1 Downto 0 Do Begin check:=Components[i];
If (check is TCheckbox) and TCheckbox(check).checked Then assignfile(f, 'C:\Programme\Programmname\Merkliste.txt'); rewrite(f); writeln(f, TCheckbox(check).caption); closefile(f); end; end; |
Ich bekomme bei der writeln immer einen Zugriffsverletzungsfehler bei 0000000x0000000, also wohl ganz am Anfang :-/
Was mache ich hier falsch?
Danke euch im Voraus!
Ps: Nehmt mir den Mumpitz, den ich da programmiere nicht übel 
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: Mi 02.09.09 21:23
Ich rück das für dich mal richtig ein, vielleicht siehst du den Fehler dann schon selber.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| procedure TForm1.BRestartActionClick(Sender: TObject); var f : Textfile; check: Tcomponent; i :integer; begin For i:=ComponentCount-1 Downto 0 Do Begin check:=Components[i];
If (check is TCheckbox) and TCheckbox(check).checked Then assignfile(f, 'C:\Programme\Programmname\Merkliste.txt');
rewrite(f); writeln(f, TCheckbox(check).caption); closefile(f); end; end; |
Und damit diese Probleme durch schlechte Formatierung nicht mehr auftreten, empfehle ich dir das hier als Bettlektüre
www.delphi-treff.de/delphi-styleguide/
_________________ PROGRAMMER: A device for converting coffee into software.
|
|
Vamos 
      
Beiträge: 44
|
Verfasst: Mi 02.09.09 21:34
|
|
Wolle92
      
Beiträge: 1296
Windows Vista Home Premium
Delphi 7 PE, Delphi 7 Portable, bald C++ & DirectX
|
Verfasst: Mi 02.09.09 21:36
Ich geb dir mal nen Tipp: Geh den Ablauf mal für den Fall durch, das die Checkbox nicht gecheckt ist, und überleg, was alles ausgeführt wird und was nicht
Edit: Xentar hatte den Quelltext für dich schon korrekt eingerückt, so wie du es jetzt als letztes gepostet hast, ist es wieder falsch.
_________________ 1405006117752879898543142606244511569936384000000000.
|
|
Vamos 
      
Beiträge: 44
|
Verfasst: Mi 02.09.09 21:42
Moderiert von Narses: Komplett-Zitat des letzten Beitrags entfernt.
Hmmm... in meinem Fall sind die Cheboxes vorerst IMMER gechecked... Trotzdem gehts nicht... Mir sagt der Fehler zugriffsverletzung nichts. Habe schon die Zugriffsrechte auf meine txt erhöht (alle vollzugriff) dachte windwos macht mir da nen Strich durch die Rechnung.
Und Ihr wärt nicht so freundlich mir zu sagen, was genau ich ändern müsste? Meine didaktische Ader liegt nämlich bereits seit 18 Uhr im Bett 
|
|
FinnO
      
Beiträge: 1331
Erhaltene Danke: 123
Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
|
Verfasst: Mi 02.09.09 21:45
ganz vorsichtig: überleg mal genau, was nach der Abfrage ausgeführt wird, und was ausgeführt werden soll (in besagtem Fall)
|
|
Vamos 
      
Beiträge: 44
|
Verfasst: Mi 02.09.09 21:49
FinnO hat folgendes geschrieben : | | ganz vorsichtig: überleg mal genau, was nach der Abfrage ausgeführt wird, und was ausgeführt werden soll (in besagtem Fall) |
Danke für die zahlreichen Tipps. Das einzige was mir momentan einfällt:
Evtl. ein else? Für den besagten Fall?
Denke mal, wenn kein else vorhanden = end; oder?
Ps: womit soll ich vorsichtig sein? 
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: Mi 02.09.09 21:51
1. Zugriffsverletzung hat nichts mit der Textdatei zu tun, sondern dass du auf Speicher zugreifst, wo du nicht hin darfst, z.B. durch nicht initialisierte Objekte.
Vamos hat folgendes geschrieben : | Und Ihr wärt nicht so freundlich mir zu sagen, was genau ich ändern müsste? Meine didaktische Ader liegt nämlich bereits seit 18 Uhr im Bett  |
Nein, denn dann lernst du es nicht
Geh schlafen, wenn du müde bist, und versuch es morgen ausgeruht.
Du brauchst kein else - bei deinem Code sind nur die Zeilen nach dem if schon wieder falsch eingerückt. Das hatte schon einen Grund.
_________________ PROGRAMMER: A device for converting coffee into software.
|
|
Vamos 
      
Beiträge: 44
|
Verfasst: Mi 02.09.09 21:53
Moderiert von Narses: Komplett-Zitat des letzten Beitrags entfernt.
Nee, gehe net schlafen, muss meine Freundin sich eben gedulden oder allein schlafen  Da beiß ich mich jetzt durch!
|
|
platzwart
      
Beiträge: 1054
Erhaltene Danke: 78
Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
|
Verfasst: Mi 02.09.09 21:57
kleiner Tipp:
Welche Zeilen (a, b, c, d) werden ausgeführt, wenn "someBool" = True?
Delphi-Quelltext 1: 2: 3: 4: 5:
| If(someBool = True)then a b c d |
_________________ Wissenschaft schafft Wissenschaft, denn Wissenschaft ist Wissenschaft, die mit Wissen und Schaffen Wissen schafft. (myself)
|
|
Vamos 
      
Beiträge: 44
|
Verfasst: Mi 02.09.09 22:01
Moderiert von Narses: Komplett-Zitat des letzten Beitrags entfernt.
Hi Platzwart, was isn somebool?
Irgendein Boolean?
Hmmm das klingt so, als hätte ich im IF-Teil schon nen Fehler... Ich weiss es nicht.
|
|
platzwart
      
Beiträge: 1054
Erhaltene Danke: 78
Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
|
Verfasst: Mi 02.09.09 22:06
"someBool" war nur ein Beispiel für einen Variablennamen.
Beantworte einfach die Fragen, welche Zeilen (a, b, c, d) ausgeführt werden, wenn die If-Bedingung wahr ist... Wenn du mir das sagst, gebe ich dir die Lösung, ist doch ein Deal 
_________________ Wissenschaft schafft Wissenschaft, denn Wissenschaft ist Wissenschaft, die mit Wissen und Schaffen Wissen schafft. (myself)
|
|
Vamos 
      
Beiträge: 44
|
Verfasst: Mi 02.09.09 22:11
Moderiert von Narses: Komplett-Zitat des letzten Beitrags entfernt.
Nur die erste...
Ps: Ich habe jetzt den Teil nach der Bedingung noch einmal zwischen Begin und end gesetzt und einen Eintrag tätigt er nun! Dank soweit, nun weiss ich nur noch nicht, warum eben nur einen, denn eigentlich ist der Teil, wie du es nanntest a, b, c, d doch innerhalb der Zählschleife...
|
|
platzwart
      
Beiträge: 1054
Erhaltene Danke: 78
Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
|
Verfasst: Mi 02.09.09 22:13
Korrekt, in der Zählschleife! ABER ABER ABER das AssignFile wird nur dann ausgeführt, wenn die Checkbox gechecked ist, die drei Zeilen darunter werden aber IMMER ausgeführt. Also kann es vorkommen, dass du ein Rewrite(F) machst, obwohl kein AssignFile stattgefunden hat und dann knallts mit oben genannter Fehlermeldung. Also immer brav begin und end setzen, dann klappts auch zur Laufzeit ^^
_________________ Wissenschaft schafft Wissenschaft, denn Wissenschaft ist Wissenschaft, die mit Wissen und Schaffen Wissen schafft. (myself)
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: Mi 02.09.09 22:14
Ahh, er hats
Hoffe du verstehst auch das Problem.
Vamos hat folgendes geschrieben : | | nun weiss ich nur noch nicht, warum eben nur einen, denn eigentlich ist der Teil, wie du es nanntest a, b, c, d doch innerhalb der Zählschleife... |
Was machen denn die Befehle, die du IN DER SCHLEIFE verwendest?
AssignFile?
Reset?
Write?
CloseFile?
Es gibt Dinge, die gehören außerhalb der Schleife hin 
_________________ PROGRAMMER: A device for converting coffee into software.
|
|
Regan
      
Beiträge: 2157
Erhaltene Danke: 72
Java (Eclipse), Python (Sublimetext 3)
|
Verfasst: Mi 02.09.09 22:15
|
|
Vamos 
      
Beiträge: 44
|
Verfasst: Mi 02.09.09 22:19
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: Mi 02.09.09 22:24
Und da ich mir vorstellen kann, wie dein Code nun aussieht, hab ich noch einen
Schau dir mal die Verwendung von try ... finally ... end; an.
_________________ PROGRAMMER: A device for converting coffee into software.
|
|
Vamos 
      
Beiträge: 44
|
Verfasst: Mi 02.09.09 22:28
|
|
Regan
      
Beiträge: 2157
Erhaltene Danke: 72
Java (Eclipse), Python (Sublimetext 3)
|
Verfasst: Mi 02.09.09 22:30
Hast du dir schonmal Warnungen von Delphi durchgelesen? Sicherlich nicht. Da steht jetzt aber folgende:
| Zitat: |
Variable i könnte undefiniert sein.
|
Also: Erst Dateikram, dann Schleife.
Zuletzt bearbeitet von Regan am Mi 02.09.09 22:31, insgesamt 1-mal bearbeitet
|
|
|