Autor Beitrag
Vamos
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 44



BeitragVerfasst: 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:

ausblenden 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);
          //Merkdatei_loeschen; <--- erstmal ausgelassen. 
          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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Mi 02.09.09 21:23 
Ich rück das für dich mal richtig ein, vielleicht siehst du den Fehler dann schon selber.
ausblenden 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);
    //Merkdatei_loeschen; <--- erstmal ausgelassen. 
  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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 44



BeitragVerfasst: Mi 02.09.09 21:34 
Moderiert von user profile iconNarses: Komplett-Zitat des letzten Beitrags entfernt.

Sieht schon besser aus, danke. Habe das jetzt mal umgebaut, aber scheine auf dem Schlauch zu stehen :(

ausblenden 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);
           losefile(f);
    end;
          //Merkdatei_loeschen;
end;


Bringt mir den Selben Fehler... Würd ich nur net schon so lang da hängen...
Wolle92
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1296

Windows Vista Home Premium
Delphi 7 PE, Delphi 7 Portable, bald C++ & DirectX
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 44



BeitragVerfasst: Mi 02.09.09 21:42 
Moderiert von user profile iconNarses: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1331
Erhaltene Danke: 123

Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 44



BeitragVerfasst: Mi 02.09.09 21:49 
user profile iconFinnO hat folgendes geschrieben Zum zitierten Posting springen:
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? :roll:
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: 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.

user profile iconVamos hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 44



BeitragVerfasst: Mi 02.09.09 21:53 
Moderiert von user profile iconNarses: 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1054
Erhaltene Danke: 78

Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
BeitragVerfasst: Mi 02.09.09 21:57 
kleiner Tipp:

Welche Zeilen (a, b, c, d) werden ausgeführt, wenn "someBool" = True?

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 44



BeitragVerfasst: Mi 02.09.09 22:01 
Moderiert von user profile iconNarses: 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1054
Erhaltene Danke: 78

Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 44



BeitragVerfasst: Mi 02.09.09 22:11 
Moderiert von user profile iconNarses: 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1054
Erhaltene Danke: 78

Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Mi 02.09.09 22:14 
Ahh, er hats :D
Hoffe du verstehst auch das Problem.

user profile iconVamos hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2157
Erhaltene Danke: 72


Java (Eclipse), Python (Sublimetext 3)
BeitragVerfasst: Mi 02.09.09 22:15 
Hier nochmal zur Veranschaulichung:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
    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);

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
    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);

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
  If (check is TCheckbox) and TCheckbox(check).checked Then
  begin
      assignfile(f, 'C:\Programme\Programmname\Merkliste.txt');
      rewrite(f);  
      writeln(f, TCheckbox(check).caption);
      closefile(f);
  end;

Nur der letzte Quelltext wird korrekt ausgeführt.

user profile iconXentar hat folgendes geschrieben Zum zitierten Posting springen:

Was machen denn die Befehle, die du IN DER SCHLEIFE verwendest?
AssignFile?
Reset?
Write?
CloseFile?

Des Weiteren würde ich eine TStringList verwenden.
Vamos Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 44



BeitragVerfasst: Mi 02.09.09 22:19 
user profile iconXentar hat folgendes geschrieben Zum zitierten Posting springen:

Was machen denn die Befehle, die du IN DER SCHLEIFE verwendest?
AssignFile?
Reset?
Write?
CloseFile?
user profile iconRegan hat folgendes geschrieben Zum zitierten Posting springen:
Des Weiteren würde ich eine TStringList verwenden.


Aaaaah, die überschreiben mein File bei jedem Durchlauf mit genau einem Wert! *trööööt* er hats begriffen, danke euch!!!!


PS: habe auch gelesen, dass assignfile veraltet ist, aber da es mit einer TXT weiter geht und ich einzelne werte (max 19) einfüge, denke ich, dass das ok ist.

Mal gucken, obs jetzt funktioniert, sonst komm ich zum weinen wieder her! ; )

Moderiert von user profile iconNarses: Zitate kenntlich gemacht.
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 44



BeitragVerfasst: Mi 02.09.09 22:28 
Moderiert von user profile iconNarses: Komplett-Zitat des letzten Beitrags entfernt.

Fühle mich beobachtet, woher willstn des wissen? ;-)

Aber: er sieht so aus und geht net ;.(

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
procedure TForm1.BRestartActionClick(Sender: TObject);
var
f : Textfile;
check: Tcomponent;
i :integer;
begin

            check:=Components[i];
            If (check is TCheckbox) and TCheckbox(check).checked Then
            begin
              assignfile(f, 'C:\Programme\Programmname\Merkliste.txt');
              rewrite(f);
                For i:=ComponentCount-1 Downto 0 Do
                Begin
                  writeln(f, TCheckbox(check).caption);
                end;
              closefile(f);
          end;

end;


Jetzt schreibt er mir die Liste voll, bis er würgt... Werd ich das in diesem Jahr noch hinbekommen!? :-)
Regan
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2157
Erhaltene Danke: 72


Java (Eclipse), Python (Sublimetext 3)
BeitragVerfasst: 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