Autor Beitrag
D. Annies
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1843

windows 7
D6 Enterprise, D7 Pers und TD 2006
BeitragVerfasst: Mi 21.04.10 10:32 
Hi, Delpher,

die TextDatei to_do.txt ist nicht vorhanden - sie wird erstellt = ok
sie ist vorhanden, es wird Text angehängt = ok
es wird noch einmal Text angehängt = ok

ich lösche aus der Textdatei einige Zeilen und speichere ab = ok
dann will ich erneut Text anhängen, es werden nur irgendwelche
Sonderzeichen eingetragen == NICHT OK !!

Den Code habe ich zur Sicherheit mit angegeben:

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:
51:
52:
53:
  AssignFile(t1, label30.caption + 'OUTTXT\to_do.txt');
  if FileExists(label30.caption + 'OUTTXT\to_do.txt'then begin Append(t1) end
  else                                                     begin Rewrite(t1) end;

  for k := 1 to 3 do writeln(t1);
    writeln(t1, 'Übereinstimmungen, Abweichungen und Fehler in der Büchertabelle:    ',
                  datetostr(now) + ' ' + timetostr(time));  writeln(t1);
  gauge1.MinValue := 0; gauge1.MaxValue := QBuecher.recordcount;
  screen.Cursor := crhourglass;
  QBuecher.first; k := 1; gauge1.Visible := true;
  while not qBuecher.eof do
  begin
    gauge1.Progress := k;
    gef1 := TbBuchstamm.locate('TITEL', QBuecher.fieldbyname('TITEL').asstring, []);
    gef2 := TbLektstamm.locate('TITEL', QBuecher.fieldbyname('TITEL').asstring, []);
    if gef1 or gef2 then
    begin
      ages := 0; aakt := 0;
      if gef1 then
      begin
        aTit := TbBuchstamm.fieldbyname('Titel').AsString;
        ages := TbBuchstamm.fieldbyname('GES').asinteger;
        aakt := TbBuchstamm.fieldbyname('AKT').asinteger;
      end
      else
      if gef2 then
      begin
        aTit := TbLektstamm.fieldbyname('Titel').AsString;
        ages := TbLektstamm.fieldbyname('GES').asinteger;
        aakt := TbLektstamm.fieldbyname('AKT').asinteger;
      end;

      tt := QBuecher.fieldbyname('TITEL').asstring;  n1 := 0; n2 := 0;
      repeat
        inc(n1); if QBuecher.fieldbyname('A_DATUM').asstring = '' then inc(n2);
        QBuecher.next; inc(k);
      until  (QBuecher.Fieldbyname('TITEL').asstring <> tt) or  QBuecher.eof;

      if n1 <> ages then writeln(t1, format('%-45s', [aTit]), '  GesAnz falsch ',
                                     format('%5s',   [inttostr(n1)]), '   ');

      if n2 <> aakt then writeln(t1, format('%-45s', [aTit]), '  AktAnz falsch!  ',
                                     format('%5s', [inttostr(n2)]));
    end
    else
    begin
      writeln(t1, 'Buch ', QBuecher.fieldbyname('TITEL').asstring, ' fehlt in der Stammdatei!');
      helpstr := QBuecher.fieldbyname('TITEL').asstring;
      repeat
        QBuecher.next;
      until QBuecher.fieldbyname('TITEL').asstring <> helpstr;
    end;
  end;


Was kann da bloß los sein??

Danke für Hilfe / Lösungen (äh, eine reicht :)) )
Gruß, Detlef

_________________
ut vires desint, tamen est laudanda voluntas
Chemiker
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 194
Erhaltene Danke: 14

XP, Vista 32 Bit, Vista 64 Bit, Win 7 64 Bit, Win 10, Win 11
BDS 2006, RAD Studio 2009+C++, Delphi 13, VS 2010 Prof.
BeitragVerfasst: Mi 21.04.10 10:59 
Hallo D.Annies,

auf jeden Fall mal IOResult einsetzen für E/A-Operation.

Bis bald Chemiker
delphi10
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 447
Erhaltene Danke: 2

W2K, XP, Vista64, Win7 64
RAD-Studio 2010
BeitragVerfasst: Mi 21.04.10 12:20 
Vorher:
{$I-}
Nachher:
{$I+}
sonst wirds nix mit IOResult. Zu beginn mal den IOResult abfragen um den Puffer zu löschen. Sonst zeigt dir IOResult bei der ersten Abfrage möglicherweise einen alten Fehler an der mit dieser Procedure nichts zu tun hat.

_________________
Salus populi suprema lex esto
Tastaro
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 414
Erhaltene Danke: 23



BeitragVerfasst: Mi 21.04.10 13:29 
AssignFile sehe ich, Append und Rewrite auch. Gibt es auch ein Close?

Beste Grüße
D. Annies Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1843

windows 7
D6 Enterprise, D7 Pers und TD 2006
BeitragVerfasst: Do 22.04.10 07:46 
Ja, close hatte ich nicht vergessen, auf diesem Schnipsel aber vergessen, ihn hinzuschreiben - danke für deine Aufmerksamkeit. Nein, ich dachte, IOResult wäre langsam out, deshalb habe ich jetzt mal eine Stringlist genommen, aber jetzt ist es noch schlechter, jetzt werden nicht nur Steuerzeichen angehängt, sondern die - vorher aus 15 Zeilen bestehende Textdatei besteht dann aus EINER Zeile mit Steuerzeichen:

Code:

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:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
if FileExists(label30.caption + 'OUTTXT\to_do.txt'then
  begin
    strliste := Tstringlist.create;
    strliste.loadfromfile(label30.caption+'OUTTXT\to_do.txt');
    for k := 1 to 3 do strliste.append(' ');
    strliste.Append('Übereinstimmungen, Abweichungen und Fehler in der Büchertabelle:    ' +
                    datetostr(now) + ' ' + timetostr(time));
    strliste.append(' ');
    gauge1.MinValue := 0; gauge1.MaxValue := QBuecher.recordcount;
    screen.Cursor := crhourglass;
    QBuecher.first; k := 1; gauge1.Visible := true;
    while not qBuecher.eof do
    begin
      gauge1.Progress := k;
      gef1 := TbBuchstamm.locate('TITEL', QBuecher.fieldbyname('TITEL').asstring, []);
      gef2 := TbLektstamm.locate('TITEL', QBuecher.fieldbyname('TITEL').asstring, []);
      if gef1 or gef2 then
      begin
        ages := 0; aakt := 0;
        if gef1 then
        begin
          aTit := TbBuchstamm.fieldbyname('Titel').AsString;
          ages := TbBuchstamm.fieldbyname('GES').asinteger;
          aakt := TbBuchstamm.fieldbyname('AKT').asinteger;
        end
        else
        if gef2 then
        begin
          aTit := TbLektstamm.fieldbyname('Titel').AsString;
          ages := TbLektstamm.fieldbyname('GES').asinteger;
          aakt := TbLektstamm.fieldbyname('AKT').asinteger;
        end;

        tt := QBuecher.fieldbyname('TITEL').asstring;  n1 := 0; n2 := 0;
        repeat
          inc(n1); if QBuecher.fieldbyname('A_DATUM').asstring = '' then inc(n2);
          QBuecher.next; inc(k);
        until  (QBuecher.Fieldbyname('TITEL').asstring <> tt) or  QBuecher.eof;

        if n1 <> ages then strliste.append(format('%-45s', [aTit]) + '  GesAnz falsch ' +
                                           format('%5s',   [inttostr(n1)]) + '   ');

        if n2 <> aakt then strliste.append(format('%-45s', [aTit]) + '  AktAnz falsch!  ' +
                                           format('%5s', [inttostr(n2)]));
      end
      else
      begin
        strliste.append('Buch ' + QBuecher.fieldbyname('TITEL').asstring + ' fehlt in der Stammdatei!');
        helpstr := QBuecher.fieldbyname('TITEL').asstring;
        repeat
          QBuecher.next;
        until QBuecher.fieldbyname('TITEL').asstring <> helpstr;
      end;
    end;

    strliste.append(' ');
    strliste.append('************* Gegenprobe ************  (ok, wenn kein Eintrag)');
    strliste.append(' ');

   sucheInBuchLekt(TbBuchstamm);

   sucheInBuchLekt(TbLektstamm);

   strliste.SaveToFile(label30.caption+ 'OUTTXT\to_do.txt');
   strliste.free;


Das nenne ich verschlimmbessern!
Wer kann helfen? Soll ich wieder zurückgehen auf den alten Code?

_________________
ut vires desint, tamen est laudanda voluntas
zuma
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 660
Erhaltene Danke: 21

Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
BeitragVerfasst: Do 22.04.10 07:49 
StringListe mit Append ??
pro Zeile ein
ausblenden Delphi-Quelltext
1:
StrListe.add(DeinStr);					

dürfte dir mehr als eine Zeile speichern ;)

btw: Dein Code liest sicher sehr unbequem. Pro Befehl eine Zeile und hier und da mal ne einrückung und schon liest es sich besser.
Das du evtl. Speicherlöcher machst, ist dir klar ??
wenn dein programm vor dem strliste.free aussteigt (durch fehler z.b.), bleibt die strliste im speicher. Besser ist
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
strliste := TStringList.Create;
Try
 ...
finally
 Strliste.free;
end;

_________________
Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
D. Annies Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1843

windows 7
D6 Enterprise, D7 Pers und TD 2006
BeitragVerfasst: Do 22.04.10 08:52 
Hi, Zuma,
danke für deine Hinweise - klingt gut, werde ich mal gleich umsetzen! Melde mich wieder.
Detlef

_________________
ut vires desint, tamen est laudanda voluntas
D. Annies Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1843

windows 7
D6 Enterprise, D7 Pers und TD 2006
BeitragVerfasst: Do 22.04.10 10:19 
Hi, Zuma,

ich weiß nicht weiter, bist du gescheiter?

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:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
  if FileExists(label30.caption + 'to_do.txt'then
  begin
    strliste := Tstringlist.create;
    try
      strliste.loadfromfile(label30.caption+'to_do.txt');
      for k := 1 to 3 do strliste.add(' ');
      strliste.Add('Übereinstimmungen, Abweichungen und Fehler in der Büchertabelle:    ' +
                    datetostr(now) + ' ' + timetostr(time));
      strliste.add(' ');
      gauge1.MinValue := 0; gauge1.MaxValue := QBuecher.recordcount;
      screen.Cursor := crhourglass;
      QBuecher.first; k := 1; gauge1.Visible := true;
      while not qBuecher.eof do
      begin
        gauge1.Progress := k;
        gef1 := TbBuchstamm.locate('TITEL', QBuecher.fieldbyname('TITEL').asstring, []);
        gef2 := TbLektstamm.locate('TITEL', QBuecher.fieldbyname('TITEL').asstring, []);
        if gef1 or gef2 then
        begin
          ages := 0; aakt := 0;
          if gef1 then
          begin
            aTit := TbBuchstamm.fieldbyname('Titel').AsString;
            ages := TbBuchstamm.fieldbyname('GES').asinteger;
            aakt := TbBuchstamm.fieldbyname('AKT').asinteger;
          end
          else
          if gef2 then
          begin
            aTit := TbLektstamm.fieldbyname('Titel').AsString;
            ages := TbLektstamm.fieldbyname('GES').asinteger;
            aakt := TbLektstamm.fieldbyname('AKT').asinteger;
          end;

          tt := QBuecher.fieldbyname('TITEL').asstring;  n1 := 0; n2 := 0;
          repeat
            inc(n1); if QBuecher.fieldbyname('A_DATUM').asstring = '' then inc(n2);
            QBuecher.next; inc(k);
          until  (QBuecher.Fieldbyname('TITEL').asstring <> tt) or  QBuecher.eof;

          if n1 <> ages then strliste.add(format('%-45s', [aTit]) + '  GesAnz falsch ' +
                                          format('%5s',   [inttostr(n1)]) + '   ');

          if n2 <> aakt then strliste.add(format('%-45s', [aTit]) + '  AktAnz falsch!  ' +
                                          format('%5s', [inttostr(n2)]));
        end
        else
        begin
          strliste.add('Buch ' + QBuecher.fieldbyname('TITEL').asstring + ' fehlt in der Stammdatei!');
          helpstr := QBuecher.fieldbyname('TITEL').asstring;
          repeat
            QBuecher.next;
          until QBuecher.fieldbyname('TITEL').asstring <> helpstr;
        end;
      end;

      strliste.add(' ');
      strliste.add('************* Gegenprobe ************  (ok, wenn kein Eintrag)');
      strliste.add(' ');
      strliste.SaveToFile(label30.caption+ 'to_do.txt');
    finally
      strliste.free;
    end;
    QBuecher.first;
    screen.Cursor := crdefault;  gauge1.Visible := false;
    button11.setfocus; maussprung(button11);
    buchDM_Dlg.opendialog1.InitialDir := label30.caption;
    buchDM_Dlg.opendialog1.filename   := label30.caption+ 'to_do.txt';
  end
  else showmessage('Datei ' + label30.caption+ 'to_do.txt' + ' ist nicht vorhanden');


Hab gedacht, ich hätte deine Anweisungen richtig umgesetzt, aber - EINE Zeile aus Steuerzeichen. Hilf doch noch mal.
Bis denne, Detlef

_________________
ut vires desint, tamen est laudanda voluntas
zuma
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 660
Erhaltene Danke: 21

Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
BeitragVerfasst: Do 22.04.10 10:41 
hm, grundlegend falsches sehe ich da nicht so auf den ersten blick ... (wobei (wie erwähnt) dein Schreibstil nicht die leserlichkeit erhöht)
hast du deine Datei mal gelöscht und dann neu erstellt ? oder lädst du den 'alten Müll' immer wieder ?
prüfe mal bei jedem add, mit showmessage, was in deinen Parametern zur laufzeit drin steht
deine Formatanweisung is mir auch nich ganz klar, warum du das so machst
ausblenden Delphi-Quelltext
1:
2:
if n1 <> ages then strliste.add(format('%-45s', [aTit]) + '  GesAnz falsch ' +
                                          format('%5s',   [inttostr(n1)]) + '   ');

würde ich so machen
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
if n1 <> ages then 
 strliste.add(format('%s', [aTit]) + 
        '  GesAnz falsch ' +
              format('%d', [inttostr(n1)]) + 
        '   ');


mach mal den test mit showmessage, wenn's dann immer noch nicht klappt, zeig mal den Inhalt der Datei

Edit: in der eile ist mir ein kleiner fehler unterlaufen (danke Tastaro)
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
if n1 <> ages then 
 strliste.add(format('%s', [aTit]) +  // es sei denn, du willst die Titel auf 45 zeichen abschneiden
        '  GesAnz falsch ' +
              format('%d', [n1]) + // da entfällt natürlich die umwandlung in einen String
        '   ');

_________________
Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
D. Annies Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1843

windows 7
D6 Enterprise, D7 Pers und TD 2006
BeitragVerfasst: Do 22.04.10 11:37 
Hi, Zuma,

ich habe jedesmal die Datei gelöscht, also die ist ok.
die Formatanweisung '%-45s' sorgt für linksbündige Ausgabe 45 Zeichen, auch ok.
showmessage ist ebenfalls ok.
ja, ich weiß nicht, was da sein kann. Das Speichern?

Det :roll:

_________________
ut vires desint, tamen est laudanda voluntas
zuma
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 660
Erhaltene Danke: 21

Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
BeitragVerfasst: Do 22.04.10 12:56 
Zeig mal den dateiinhalt

_________________
Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
D. Annies Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1843

windows 7
D6 Enterprise, D7 Pers und TD 2006
BeitragVerfasst: Do 22.04.10 13:25 
Hi, Zuma,

es geschehen noch Zeichen und Wunder - ich wollte ja das abspeichern noch mal überprüfen - und daran lag es. Irgendwie ist es also nicht möglich, innerhalb des try-Blockes schon zu speichern.
Ich habe es jetzt ganz elegant ;) direkt in ein Memo geschrieben, im Memo mit .add angehängt, sehe es mir an und irgendwann, wenn ich genug gesehen habe, speichere ich es denn mal ab. -- Und das funnzt!

Dank dir sehr für deine Anregungen!
Grüße aus HL, Detlef

_________________
ut vires desint, tamen est laudanda voluntas