AGB  ·  Datenschutz  ·  Impressum  







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

nur eine zeile aus datei laden

Ein Thema von Meflin · begonnen am 2. Feb 2005 · letzter Beitrag vom 2. Feb 2005
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#11

Re: nur eine zeile aus datei laden

  Alt 2. Feb 2005, 16:09
Zitat von Pseudemys Nelsoni:
wurde doch schon gesagt: Seek()
stweht in meiner hilfe
Zitat:
Not used with text files
ich habe aber ein textfile
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#12

Re: nur eine zeile aus datei laden

  Alt 2. Feb 2005, 16:14
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...
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#13

Re: nur eine zeile aus datei laden

  Alt 2. Feb 2005, 16:16
Zitat von Meflin:
Zitat von Pseudemys Nelsoni:
wurde doch schon gesagt: Seek()
stweht in meiner hilfe
Zitat:
Not used with text files
ich habe aber ein textfile
Dann lies eben mit Readln solange Zeilen ein, bis du die richtige hast, oder ändere die Datei, so dass du nicht mehr mit einer Textdatei arbeiten musst.
@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
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#14

Re: nur eine zeile aus datei laden

  Alt 2. Feb 2005, 16:21
stimmt, hab ich mit (un)typisierten dateien verwechselt
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#15

Re: nur eine zeile aus datei laden

  Alt 2. Feb 2005, 16:30
Zitat von alcaeus:
Dann lies eben mit Readln solange Zeilen ein, bis du die richtige hast, oder ändere die Datei, so dass du nicht mehr mit einer Textdatei arbeiten musst.
datei ändern: etwas zu umständlich
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 genau sowas will ich aber verhindern. oder versteh ich da jetzt was falsch??
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#16

Re: nur eine zeile aus datei laden

  Alt 2. Feb 2005, 16:33
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:
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;
Greetz
alcaeus

PS: Getestet ist der Code (wie immer) nicht
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#17

Re: nur eine zeile aus datei laden

  Alt 2. Feb 2005, 16:34
Zitat von Meflin:
Zitat von Pseudemys Nelsoni:
wurde doch schon gesagt: Seek()
stweht in meiner hilfe
Zitat:
Not used with text files
ich habe aber ein textfile
Bezieht sich die Meldung auf Delphi for Win32 oder Delphi for .NET

Bei Delphi for Win32 sollte es eigentlich keine solchen Einschränkungen geben

mfG
mirage228
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#18

Re: nur eine zeile aus datei laden

  Alt 2. Feb 2005, 16:45
moin mirage, ne wie es aussieht geht Seek() mit "TextFile" nicht
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#19

Re: nur eine zeile aus datei laden

  Alt 2. Feb 2005, 16:55
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

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#20

Re: nur eine zeile aus datei laden

  Alt 2. Feb 2005, 17:17
Zitat von Meflin:
ich will eine zeile aus einer datei ermitteln. normalerweise würde ich dazu die datei in enie stringlist laden und halt einfach auf den index zugreifen. allerdings wäre es performancemäßig - da ich ja vorher schon weis welche zeile ich brauche - viel besser nur diese eine zeile zu laden. ich kann mir zwar nicht vorstellen, dass das geht, aber wissen kann man ja nie
Du kannst dich nicht Duschen ohne dich nass zu machen!

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.
Andreas
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 15:44 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