Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Wie Dateizeiger auf bestimmte Position in Textdatei setzen? (https://www.delphipraxis.net/89520-wie-dateizeiger-auf-bestimmte-position-textdatei-setzen.html)

mo_greene 1. Apr 2007 18:01


Wie Dateizeiger auf bestimmte Position in Textdatei setzen?
 
Hallo,

wie kann ich den Dateizeige z.B. auf die 3. Zeile in einer Textdatei setzen?

Mir ist klar, dass ich das mit der Routine "Seek" erreiche, aber was genau muss ich dort eingeben?

Delphi-Quellcode:
Seek(var F; N: Longint)
Vielen Dank

Mfg David

Jelly 1. Apr 2007 18:25

Re: Wie Dateizeiger auf bestimmte Position in Textdatei setz
 
Mit Seek kannst Du auf das x-te Zeichen der Datei springen. Aber da ich davon ausgehen, dass deine Zeilen unterschiedlich lang sind, wird das so nix. Ein Zeilenumbruch erfolgt in der Regel in der Windowswelt durch #10#13, oder eventuell einfach durch #13. Diese Zeichenvorkommen musst du also schon selbst suchen. Oder du lädst die Datei in eine StringList rein und greifst direkt über den Zeilenindex auf die gewünschte Zeile zu.

dataspider 1. Apr 2007 18:29

Re: Wie Dateizeiger auf bestimmte Position in Textdatei setz
 
Hi,

ich denke, dass man hier mit ReadLn schneller am Ziel ist.

Cu, Frank

mo_greene 1. Apr 2007 18:34

Re: Wie Dateizeiger auf bestimmte Position in Textdatei setz
 
Wie muss ich das angeben, dass der Zeiger auf die x.-Zeile gesetzt wird?

x möchte ich vorher Festlegen!

mkinzler 1. Apr 2007 18:35

Re: Wie Dateizeiger auf bestimmte Position in Textdatei setz
 
ReadLn liest immer genau eine Zeile.

SirThornberry 1. Apr 2007 18:37

Re: Wie Dateizeiger auf bestimmte Position in Textdatei setz
 
Zitat:

Zitat von Jelly
Mit Seek kannst Du auf das x-te Zeichen der Datei springen. Aber da ich davon ausgehen, dass deine Zeilen unterschiedlich lang sind, wird das so nix. Ein Zeilenumbruch erfolgt in der Regel in der Windowswelt durch #10#13, oder eventuell einfach durch #13. Diese Zeichenvorkommen musst du also schon selbst suchen. Oder du lädst die Datei in eine StringList rein und greifst direkt über den Zeilenindex auf die gewünschte Zeile zu.

fast richtig. Unter Windows wird meist #13#10 verwendet, nicht #10#13

scrat1979 1. Apr 2007 19:29

Re: Wie Dateizeiger auf bestimmte Position in Textdatei setz
 
Delphi-Quellcode:
VAR f : TextFile;
    i : integer;
    s : string;

[...]

AssignFile(f, 'test.txt');
ResetFile(f);

FOR i:=1 to (bis_zeile-1) do readln(f, s);
// jetzt müsste sich der "Zeiger" in der richtigen Position befinden,

// HIER KOMMEN DIE ANWEISUNGEN...

[...]

CloseFile(f);

[edit]
Eine Alternative wäre, die Datei in eine StringList zu laden, hier hat man dann Zugriff auf
die einzelnen Zeilen. So z.B.

Delphi-Quellcode:
 MeineDatei := TSTringLIst.Create;
 MeineDatei.LoadFromFile('test.txt');
 // Zeile 15
 Showmessage(MeineDatei[14]) // Liste fängt bei 0 an...
 MeineDatei.Free;
Hoffe das haut so einigermassen hin. Bin noch nicht so der Profi im Code "blind" schreiben...

SCRaT

grenzgaenger 1. Apr 2007 20:49

Re: Wie Dateizeiger auf bestimmte Position in Textdatei setz
 
wie jelly sprach, du kannst in einer textdatei nicht positionieren. du kannts nur, vorne beginnen und dann zeile für zeile durchgehen. eine textdatei lieste normal so...
Delphi-Quellcode:
while not eof(f) do readln(f, s);
da musste dann halt abbrechen, wenn du die entsprechende zeile gefunden hast. deinen zugriff solltest du entsprechend optimieren, dass du alle daten beinander hast, wenn du einmal durch deine datei durchgegangen bist um nicht ständig wieder von vorne zu beginnen.

<HTH>

mo_greene 1. Apr 2007 23:37

Re: Wie Dateizeiger auf bestimmte Position in Textdatei setz
 
Okay :-D , werd ich mich mal durcharbeiten...viele Dank aufjedenfall erstmal für die Hilfe von euch :thumb:

himitsu 2. Apr 2007 10:39

Re: Wie Dateizeiger auf bestimmte Position in Textdatei setz
 
Zitat:

Zitat von grenzgaenger
wie jelly sprach, du kannst in einer textdatei nicht positionieren.

Das stimmt nicht ganz.
Offiziell ist es nicht möglich, da Seek delphi-intern gesperrt ist, aber wenn man sich selber ein entsprechende Seek-Funktion erstellt (siehe Forum), dann könnte man dieses dann doch machen.

Nur muß man dann halt aufpassen, denn die Textfunktion von Delphi nuten einen interen Cache, welcher dann leicht durcheinanderkommen kann.

Das Selbe gilt für Dateien über 2 GB Größe ... die Delphifunktionen arbeiten mit 'nem Integer, welcher auf 2 GB begrentz ist, so sind nicht alle Funktionen für über 2 GB nutzbar, es sei denn mann kümmert sich selber drum :roll:


Aber damit dein Code "ganz" Sicher läuft, kommst du eigentlich besser, wenn du die Standartfunktionen nutzt und dich dann bis zur entsprechenden Stelle durchließt.

http://www.delphipraxis.net/internal...highlight=seek

alternativ könnte man es auch noch so machen (allerdings dann noch ein paar Sicherheitsabfragen mit einbauen ... so sollte es nur gehn, wenn die gewünschte Zeile 100%ig existiert)
http://www.delphipraxis.net/internal...tial%2A#695457
Delphi-Quellcode:
Var PT: TPartialTextfile;
  i: Int64;
  S: String;


PT := TPartialTextfile.Create;
PT.Open('Test_.pas');
i := PT.GetLineStart(100);
PT.LoadPart(i, 1);
S := PT.Part[0];
PT.Free;

// S = die Zeile welche gleich nach Position 100 beginnt


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:18 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