| Autor |
Beitrag |
D. Annies
      
Beiträge: 1843
windows 7
D6 Enterprise, D7 Pers und TD 2006
|
Verfasst: 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:
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
      
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.
|
Verfasst: Mi 21.04.10 10:59
Hallo D.Annies,
auf jeden Fall mal IOResult einsetzen für E/A-Operation.
Bis bald Chemiker
|
|
delphi10
      
Beiträge: 447
Erhaltene Danke: 2
W2K, XP, Vista64, Win7 64
RAD-Studio 2010
|
Verfasst: 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
      
Beiträge: 414
Erhaltene Danke: 23
|
Verfasst: Mi 21.04.10 13:29
AssignFile sehe ich, Append und Rewrite auch. Gibt es auch ein Close?
Beste Grüße
|
|
D. Annies 
      
Beiträge: 1843
windows 7
D6 Enterprise, D7 Pers und TD 2006
|
Verfasst: 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:
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
      
Beiträge: 660
Erhaltene Danke: 21
Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
|
Verfasst: Do 22.04.10 07:49
StringListe mit Append ??
pro Zeile ein
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
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 
      
Beiträge: 1843
windows 7
D6 Enterprise, D7 Pers und TD 2006
|
Verfasst: 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 
      
Beiträge: 1843
windows 7
D6 Enterprise, D7 Pers und TD 2006
|
Verfasst: Do 22.04.10 10:19
Hi, Zuma,
ich weiß nicht weiter, bist du gescheiter?
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
      
Beiträge: 660
Erhaltene Danke: 21
Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
|
Verfasst: 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
Delphi-Quelltext 1: 2:
| if n1 <> ages then strliste.add(format('%-45s', [aTit]) + ' GesAnz falsch ' + format('%5s', [inttostr(n1)]) + ' '); |
würde ich so machen
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)
Delphi-Quelltext 1: 2: 3: 4: 5:
| if n1 <> ages then strliste.add(format('%s', [aTit]) + ' GesAnz falsch ' + format('%d', [n1]) + ' '); |
_________________ Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
|
|
D. Annies 
      
Beiträge: 1843
windows 7
D6 Enterprise, D7 Pers und TD 2006
|
Verfasst: 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 
_________________ ut vires desint, tamen est laudanda voluntas
|
|
zuma
      
Beiträge: 660
Erhaltene Danke: 21
Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
|
Verfasst: 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 
      
Beiträge: 1843
windows 7
D6 Enterprise, D7 Pers und TD 2006
|
Verfasst: 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
|
|
|