Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi FileOpen und EOF (https://www.delphipraxis.net/24614-fileopen-und-eof.html)

Pseudemys Nelsoni 23. Jun 2004 15:40


FileOpen und EOF
 
Moin :o

Delphi-Quellcode:
...

          hFile := OpenFile(buf, ofs, OF_READWRITE);
          if hFile <> 0 then
          begin
            while not EOF(hFile) do
            begin
              messagebox(0, 'hi', 'hi', 0);
            end;
          end;
        end;
...
Weiss jemand wieso hier EOF nicht funktioniert? Fehler ist "Inkompatible Typen"

Chewie 23. Jun 2004 15:50

Re: FileOpen und EOF
 
EOF ist eine Pascal-Routine, die eine Psscal-File erwartet.
OpenFile ist aber eine WinAPI-Funktion, die ein Windows-Handle erzeugt.

Pseudemys Nelsoni 23. Jun 2004 15:56

Re: FileOpen und EOF
 
Danke.

Welche anternative hab ich da denn? gibt ja sicher eine, oder?

Chewie 23. Jun 2004 16:13

Re: FileOpen und EOF
 
Pascal-Files öffnest du mit AssignFile und anschließendem Reset, Rewrite oder Append.
Bei den API-Funktionen ist mir kein EOF bekannt, sollte aber über einen Vergleich der Position des FilePointers und der Größe der Datei zu bewerkstelligen sein.

Pseudemys Nelsoni 23. Jun 2004 16:29

Re: FileOpen und EOF
 
hm, das hört sich schwer an...

Kernel32.DLL 23. Jun 2004 19:11

Re: FileOpen und EOF
 
Du könntest mit FileSeek den Dateizeiger an das Ende der Datei setzen.

Delphi-Quellcode:
FileSeek(hFile,0,2);
Den Wert speicherst du dann in einer Variablen.
Wenn der Dateizeiger im Verlauf deines Programmes dann diesen Wert hat, solltest du am Ende der Datei angelangt sein. :wink:

(Könnte funzen...)

Luckie 24. Jun 2004 10:22

Re: FileOpen und EOF
 
Was machst du denn in der Schleife? Wenn du alles lesen willst, dann nimm doch eine Routine zum Lesen ReadFile oder so, les immer Blöcke von 1024 oder so (K)Bytes ein und wenn dann weniger gelesen wird, bist du am Ende der Datei.

Pseudemys Nelsoni 24. Jun 2004 14:18

Re: FileOpen und EOF
 
hallo luckie,

daran hatte ich auch schon gedacht, aber ich möchte ja nicht char by char (also 1024 mit einmal) auslesen sondern zeile für zeile, wie könnte ich das anstellen?

Im grunde habe ich einen string in meinem prog, ich moechte nun in einer datei prüfen ob dieser string mit irgendeiner zeile übereinstimmt

Kernel32.DLL 24. Jun 2004 16:02

Re: FileOpen und EOF
 
:wiejetzt:

Ich denke mal, das du Textdateien Zeile für Zeile lesen willst. Und für Textdateien zum lesen einer ganzen Zeile gibbet den Befehl:

Aus der Borland Delphi 5 Pro Hilfe:
Zitat:

Die Prozedur Readln liest eine Textzeile aus einer Datei.

Unit

System

Kategorie

Textdateien

procedure Readln([ var F: Text; ] V1 [, V2, ...,Vn ]);

Beschreibung

Readln liest eine Textzeile aus der angegebenen Datei und setzt den Dateizeiger in die nächste Zeile.

Durch den Aufruf Readln(F) ohne Parameter wird der Dateizeiger an den Anfang der nächsten Zeile gesetzt. Ist keine nachfolgende Zeile vorhanden, wird er auf das Dateiende gesetzt.

Wird eine Anwendung als Konsolenanwendung compiliert (mit der Option Anwendung für Textbildschirm in der Registerkarte Linker des Dialogfeldes Projektoptionen oder dem Parameter -cc für den Kommandozeilen-Compiler), werden die Dateien Input und Output automatisch mit dem Konsolenfenster der Anwendung verbunden. Bei grafisch orientierten Anwendungen führt jeder Versuch, aus Input zu lesen oder in Output zu schreiben, zu einem E/A-Fehler.

Hinweis

Mit dem Compiler-Schalter {$I+} können Laufzeitfehler durch Exceptions behandelt werden. Wird {$I–} verwendet, muß explizit mit IOResult auf E/A-Fehler geprüft werden.
Dann kannst du das Ergebnis mit dem String vergleichen, wobei natürlich auch die Länge der Zeile und des Strings eine Rolle spielt.

Bei allen anderen Dateiarten macht das Lesen Zeile für Zeile ja irgendwie keinen Sinn.

p0w3r5tr34m3r 24. Jun 2004 16:56

Re: FileOpen und EOF
 
also wenn um jede zeile auslesen zu können machste einfach so:

Delphi-Quellcode:
function SeekInFile(sFile: string; sString: string): string;
var
 f: File;
 s: string;
 found: boolean;
begin
 found := false;
 assignfile(f,sFile);
 Reset(f);
  while not EOF(f) do begin
   readln(f,s);
    if SuperMatch(s,'*@{'+sString+'}@*') then
     found := true;
    else
     found := false;
  end;
 closefile(f);
  if found then
   ShowMessage('Found')
  else
   ShowMessage('Your Searchstring was not found :P');
end;
Zum aufrufen:

Delphi-Quellcode:
SeekInFile('C:\Bla.txt','Delphi-Praxis');
MfG Powerstreamer

P.S.:
Supermatch is aus der SuperMsk.pas (found @ www.torry.net)


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:59 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz