AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Textfiles Verständnisfrage & Frage

Ein Thema von Grayknife · begonnen am 28. Feb 2015 · letzter Beitrag vom 2. Mär 2015
Antwort Antwort
Grayknife

Registriert seit: 13. Feb 2015
Ort: Hessen
26 Beiträge
 
#1

AW: Textfiles Verständnisfrage & Frage

  Alt 1. Mär 2015, 13:58
Ahh, so schnell so viele Antworten

Also:
@Uwe Raabe, Hier ein Ausschnitt von der Info über Borland Delphi: "Borland® Delphi® für Microsoft® Windows™ Version 10.0.2288.42451 Update 2 Copyright © 2005 Borland® Software Corporation." -> Also Version 10 !?

@himitsu, Sry, das war viel zu oberflächlich der Fehler: Das Programm lässt sich mit dem Debugger einwandfrei starten, Erst wenn die Prozedur ausgeführt wird, Kommt eine Infobox, wo ich das Programm Anhalten,Fortsetzen kann mit der Meldung: "Im Projekt Project1.exe ist eine Exception der KLasse EInOutError mit der Meldung "Datei nicht gefunden" aufgetreten." -> Also eine Benachrichtigung über die Debugger-Exception?!

Verstehe ich das richtig, dass ich nicht die Try-Except-Schleife verwenden kann? -> Muss ich dann eher eine If Fileexists=True then ... -Schleife verwenden?

@Luckie, Also so wie ich das immer überlege müsste sie in dem Ordner, wo sich die .Exe befindet, erstellt werden. Dachte ich mir immer jedenfalls ^^.

@Klaus01, Also kopiere ich einfach den Code aus dem Beispiel und bastel ihn in bei mir mit rein?

@Sir Rufo, Warum kann das Reset nicht so Reset(Speicher,'Speicher.txt') aufgerufen werden?
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Textfiles Verständnisfrage & Frage

  Alt 1. Mär 2015, 14:11
Weil die Dokumentation das sagt?

Delphi: http://docwiki.embarcadero.com/Libra...e/System.Reset
FPC: http://www.freepascal.org/docs-html/...tem/reset.html
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo ( 1. Mär 2015 um 14:13 Uhr)
  Mit Zitat antworten Zitat
Grayknife

Registriert seit: 13. Feb 2015
Ort: Hessen
26 Beiträge
 
#3

AW: Textfiles Verständnisfrage & Frage

  Alt 1. Mär 2015, 14:26
@Sir Rufo, okey, also einfach nur Reset(Speicher) ? Aber das verstehe ich jetzt nicht Oder doch... also dann ändere ich jetzt den Code zu:
Delphi-Quellcode:
procedure TForm1.Speichern;
 var Speicher: Textfile;
     GesH:Integer;
begin
GesH:=0;
   AssignFile(Speicher,'Speicher.txt');
   Reset(Speicher);
   Readln(Speicher,GesH);
   GesZ:=GesH + GesZ;
 Rewrite(Speicher);
 Writeln(Speicher,GesZ);
 CloseFile(SPeicher);
end;
Okey, mit AssignFile weise ich also der Variablen Speicher einfach Speicher.txt zu?! Und wie kann ich jetzt eine Text Datei erstellen? o.0
  Mit Zitat antworten Zitat
SMO

Registriert seit: 20. Jul 2005
178 Beiträge
 
Delphi XE6 Professional
 
#4

AW: Textfiles Verständnisfrage & Frage

  Alt 1. Mär 2015, 14:39
Müsste Delphi 2005 oder 2006 sein.

Exceptions sind Ausnahmen und keine Schleifen. Man sollte try-finally Blöcke benutzen, um Resourcen zu schützen, try-except Blöcke um spezielle Exceptions zu behandeln, aber nicht um ALLE Exceptions zu "verschlucken".

Dein Code sollte ungefähr so aussehen:

Delphi-Quellcode:
var
  Speicher: Textfile;
  GesH: Integer;
begin
  AssignFile(Speicher, 'Speicher.txt');
{$I-}
  Reset(Speicher);
{$I+}
  try
    if IOResult = 0 then
      Readln(Speicher, GesH)
    else
      GesH := 0; // oder sonstiger Standardwert
    GesZ := GesH + GesZ + 1;
    Rewrite(Speicher);
    Writeln(Speicher, GesZ);
  finally
    CloseFile(Speicher);
  end;
Erklärung:
Du musst zuerst per AssignFile der Textfile-Variable den Dateinamen zuweisen. Sonst geht gar nichts. Du kannst ja auch nicht mit dem Auto losfahren, ohne vorher den Motor anzulassen.
Per {$I-} wird der Compiler angewiesen, keine Exceptions zu generieren wenn bei Dateioperationen wie Reset Fehler auftreten (z.B. Datei existiert nicht). Mit {$I+} generiert er dann wieder Exceptions für Dateioperationen. Also deaktivieren wir das hier nur kurz für den Reset-Aufruf. Wir müssen dann aber selbst über IOResult prüfen, ob Reset erfolgreich war oder nicht. Bei Erfolg ist der Wert 0, und du kannst per Readln aus der Datei lesen. Bei Fehler wird deine GesH-Variable mit einem Standardwert initialisiert.

Rewrite öffnet die Datei dann zur Ausgabe (ein vorheriges CloseFile ist nicht erforderlich) und löscht sie dabei komplett.
Der try-finally Block hier sorgt dafür, dass CloseFile in jedem Fall aufgerufen wird, selbst wenn bei Readln, Rewrite oder Writeln Exceptions auftreten! Da du einen Integer (GesH) liest, würde Readln z.B. eine Exception erzeugen, wenn in der Datei kein Zahlenwert, sondern ein Buchstabe oder so drin steht. Wenn du diesen Fall behandeln möchtest, musst du auch um Readln einen {$I-}..{$I+} Block setzen und IOResult nach Readln prüfen...

Aber warum sich plagen und mit diesen Uralt-Routinen Dateien lesen? Es kann durchaus Gründe dafür geben, z.B. wenn man das Programm so klein wie möglich halten will, keine VCL benutzt usw. Aber normalerweise geht es einfacher. Benutze TStream und seine Nachfahren (TStringStream), oder warum nicht INI-Dateien?

Delphi-Quellcode:
uses
  IniFiles;

var
  GesZ: Integer;

procedure TForm1.Speichern;
var
  Speicher: TIniFile;
  GesH: Integer;
begin
  Speicher := TIniFile.Create('Speicher.txt');
  try
    GesH := Speicher.ReadInteger('Variablen', 'GesH', 0);
    GesZ := GesH + GesZ;
    Speicher.WriteInteger('Variablen', 'GesH', GesZ );
  finally
    Speicher.Free;
  end;
end;

Geändert von SMO ( 1. Mär 2015 um 14:46 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

AW: Textfiles Verständnisfrage & Frage

  Alt 2. Mär 2015, 02:56
@Luckie, Also so wie ich das immer überlege müsste sie in dem Ordner, wo sich die .Exe befindet, erstellt werden. Dachte ich mir immer jedenfalls ^^.
Da hast du falsch gedacht. Es wird das aktuelle Verzeichnis genommen. Und das ist nicht unbedingt das, in dem die Anwendung liegt. Diese kann schon von einem Datei-Öffnen-Dialog geändert werden:
Delphi-Quellcode:
0procedure TForm4.btn1Click(Sender: TObject);
begin
 if OpenDialog1.Execute then
   Self.Caption := GetCurrentDir;
end;
Und wen ich mir jetzt noch die Meldung der Exception angucke, dass eine Datei nicht gefunden wurde, dann würde ich jetzt davon ausgehen, dass deine Anwendung die Datei im falschen Verzeichnis sucht und da natürlich nicht findet.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:01 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz