Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Funktion Seek (arbeiten mit Datein) (https://www.delphipraxis.net/106199-funktion-seek-arbeiten-mit-datein.html)

malibu85 7. Jan 2008 07:54


Funktion Seek (arbeiten mit Datein)
 
Guten Morgen zusammen und allen ein frohes neues jahr.

Ich habe auch gleich eine frage. und zwar geht es um das anlegen und verwalten von datein und Datensätzen. In vielen büchern fast man alles unter dem Kapitel "Árbeiten mit Datein" zusammen. Ich habe bisher herausgefunden, wie mn eine Datei anlegt und durch die folgende anweisung kann ich genau auf die erste Position einen Datenstz einfügen.
Delphi-Quellcode:
                                    with satz do
                                         begin
                                         Key  := StrToInt(edit1.text);
                                         Wert1 := edit2.text;
                                         Wert2 := StrToInt(edit3.text);
                                         Anzahl:= StrToInt(edit4.text);
                                      end;


                                      reset(Dat);     //hier war mein großes Problem!!!!
                                      seek(Dat,0);

                                      if (filepos(Dat)=0) then
                                         begin
                                         write(dat,satz);


                                       

                                         

                                         end;
mit dieser anweisung kann man genau einen Datensatz auf die erste Position einfügen...irgendwie komme ich aber mit der seek anweisung nicht zurecht. Ich würde z.b gern bei der ersten position in der datei starten und bis zum ende durchlaufen, wenn ich dann das letzte element gefunden habe dann soll ein neues rechts eingefügt werden.

Was genau sagt eigentlich die Funktion
Delphi-Quellcode:
seek(Dat,filepos(Dat)-1);
aus?
Kann es sein dass dadurch der zeiger in der datei immer um eine stelle nach links verschoben wird?

Klaus01 7. Jan 2008 08:09

Re: Funktion Seek (arbeiten mit Datein)
 
Zitat:

Was genau sagt eigentlich die Funktion
Delphi-Quellcode: markieren
seek(Dat,filepos(Dat)-1);


aus?
Kann es sein dass dadurch der zeiger in der datei immer um eine stelle nach links verschoben wird?
Guten Morgen,

das setzt den Positionszeiger eine Datensatz(Record)Position vor die aktuelle Position.
Seek(dat,0) - bringt dich an den Anfang der Datei
Seek(dat,FileSize(dat) bringt dich an das Dateiende.

Grüße
Klaus

mashutu 7. Jan 2008 08:17

Re: Funktion Seek (arbeiten mit Datein)
 
Hi,
beachte bitte, dass kein Datensatz eingefuegt wird, so wie du das machst, sondern dass der Satz an der ersten Position ueberschrieben wird! - Nur so als Hinweis

malibu85 7. Jan 2008 08:30

Re: Funktion Seek (arbeiten mit Datein)
 
könnte ich nun auch eine schlife erstellen, welche die Komplette datei einmal durchläuft
also ungefähr so

Delphi-Quellcode:

reset(Dat);
Seek(dat,0);
while not (  Seek(dat,FileSize(dat) ) do
begin
read(Dat,Werte);
seek(Dat,filepos(Dat)+1);
habe mir gedacht, dass das durchlaufen wie bei einer liste funktioniert. also ich setze mit Seek(dat,0) den zeiger auf die erste Position und setze in der schleife den zeiger immer eins weiter bis er eof ist.

geht das? hab mir gedacht das seek(Dat,filepos(Dat)+1); den zeiger um eine position weiter setzt

malibu85 7. Jan 2008 08:32

Re: Funktion Seek (arbeiten mit Datein)
 
@mashutu
ja danke für den hinweis. das dort oben war nur ein test.

malibu85 7. Jan 2008 08:33

Re: Funktion Seek (arbeiten mit Datein)
 
ups ich glaube meine abbruchbedingung ist ein wenig falsch...meine natürlich ohne seek davor

Klaus01 7. Jan 2008 08:34

Re: Funktion Seek (arbeiten mit Datein)
 
Zitat:

Zitat von malibu85
könnte ich nun auch eine schlife erstellen, welche die Komplette datei einmal durchläuft
also ungefähr so

Delphi-Quellcode:

reset(Dat);
Seek(dat,0);
while not (  Seek(dat,FileSize(dat) ) do
begin
read(Dat,Werte);
seek(Dat,filepos(Dat)+1);
habe mir gedacht, dass das durchlaufen wie bei einer liste funktioniert. also ich setze mit Seek(dat,0) den zeiger auf die erste Position und setze in der schleife den zeiger immer eins weiter bis er eof ist.

geht das? hab mir gedacht das seek(Dat,filepos(Dat)+1); den zeiger um eine position weiter setzt

Die Datei kannst Du mit

Delphi-Quellcode:
while not eof(dat) do
durchlaufen.
Und nach einem read wird der Positionszeiger automatisch um 1 erhöht.
Bei Dir würde nur jeder zweite Datensatz gelesen.

Grüße
Klaus


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:25 Uhr.

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