![]() |
Re: nur eine zeile aus datei laden
Zitat:
Zitat:
|
Re: nur eine zeile aus datei laden
naja du benutzt delphi 2005... ka wie es da ist. in <=7 geht seek() mit allen dateien.... muss ja auch, schliesslich muss man den dateizeiger auch irgendwie bewegen koennen...
|
Re: nur eine zeile aus datei laden
Zitat:
@Pseudemys Nelsoni: Ne, Seek ging schon zu TP-Zeiten nicht mit Textfiles, frag mich aber nicht warum. Bei Textdateien (also F: Textfile) kann man nur von oben nach unten durchgehn, und dann mit Reset den Zeiger wieder an den Anfang stellen. Greetz alcaeus |
Re: nur eine zeile aus datei laden
stimmt, hab ich mit (un)typisierten dateien verwechselt
|
Re: nur eine zeile aus datei laden
Zitat:
also ich hab eine zahl x, und ich will die zeile x in der datei mit möglichst wenig resourcenverbrauch auslesen (da die datei sehr groß ist will ich sie nicht komplett laden). wenn ich jetzt aber die datei wieder von vorne zeile für zeile durchgehe, kann ich sie ja auch gliech ganz auf einmal in eine stringlist laden :gruebel: genau sowas will ich aber verhindern. oder versteh ich da jetzt was falsch?? |
Re: nur eine zeile aus datei laden
Also, solange x kleiner ist als die Anzahl Zeilen in deiner Datei, ist das Auslesen einzelner Zeilen immer performanter als die gesamte Datei zu laden.
So könnte das Aussehen:
Delphi-Quellcode:
Greetz
function GetLine(F: TextFile; LineNo: Integer): String;
var i: Integer; s: String; begin i := 0; while (i <= LineNo) and not EoF(F) do begin Readln(F, s); Inc(i); end; Result := s; end; alcaeus PS: Getestet ist der Code (wie immer) nicht :!: |
Re: nur eine zeile aus datei laden
Zitat:
Bei Delphi for Win32 sollte es eigentlich keine solchen Einschränkungen geben :) mfG mirage228 |
Re: nur eine zeile aus datei laden
moin mirage, ne wie es aussieht geht Seek() mit "TextFile" nicht
|
Re: nur eine zeile aus datei laden
Hallo Leute,
da wird nicht dran gerüttelt: Seek funktioniert bei Textfiles (jedenfalls bis D7Ent) NICHT. Ich hätte es mir schon oft gewünscht, aber das Problem immer irgendwie umgehen müssen. Dies hängt damit zusammen, da z.B. bei einem File of <Datentyp> alle Zeilen (also Einträge) eine fixe Größe haben, bei Textfiles aber nicht. Deshalb kann man bei einem File of <Datentyp> ganz einfach die Byteposition ausrechnen (Line*SizeOf(<DatenTyp>)), aber bei Textfiles geht das nicht. Und damit die Borland-Programmierer nicht eine Funktion schreiben, die die Zeilenumbrüche zählt, haben die gesagt dass Seek bei Textfiles nicht geht, und wir armen Schlucker müssen die Funktion eben selbst schreiben :mrgreen: Greetz alcaeus |
Re: nur eine zeile aus datei laden
Zitat:
Also wenn du keine Information darüber hast, wo in der Datei sich die gesuchte Zeile befindet, dann hilft es nichts: die komplette Datei muss gelesen werden. Du musst aller aber nicht die ganze Datei am Stück in den Speicher laden; es reicht aus, die Datei in Blöcken von 8kb bis 256kb zu laden und dort nach den gesuchten Daten zu fanden. Das Lesen von einzelnen Zeilen mitteln ReadLn ist im Hintergrund gepuffert aber ein Dateizugriff mit TFileStream oder mit Windows-API ReadFile dürfte noch schneller sein. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:16 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