WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Große Datei teilweise einlesen

 

beneklaus

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.10.2009, 11:16     Titel: Große Datei teilweise einlesen
  Antworten mit Zitat      
Hallo,

ich muss aus mehreren große Dateien (bis GB) Informationen (als string) auslesen.
Damit das schneller geht möchte ich die Zeilenanzahl der Datei ermitteln und dann zu einer bestimmten Stelle springen und mir ab dieser die Zeilen auslesen.

Frage: Gibt es einen Befehl die Zeilenanzahl zu ermitteln und dann z.B: mit fgetl erst ab Zeile xxx der Datei das einlesen beginnen?

Bisher ermittel ich die Zeilenanzahl so:

Code:

fid_rein = fopen('datei.txt');
k=1;
   while 1
   zeileninhalt = fgetl(fid_rein);
   k=k+1;
   if ~ischar(zeileninhalt), break, end  
   end
k
 


Wie ich erst ab Zeile xxx einlesen kann weiss ich nicht.

Danke für eure Hilfe
beneklaus


denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 21.10.2009, 11:58     Titel:
  Antworten mit Zitat      
Hallo

mit fseek kannst du den Zeiger positionieren.
Zum Zählen der Zeilen gibt es kein Extra-Befehl.
Private Nachricht senden Benutzer-Profile anzeigen
 
Schrank
Forum-Century

Forum-Century


Beiträge: 203
Anmeldedatum: 10.07.08
Wohnort: Berlin
Version: ---
     Beitrag Verfasst am: 21.10.2009, 13:29     Titel:
  Antworten mit Zitat      
Hallo beneklaus,

die Anzahl Zeilen kannst du z.B. mit
Code:

file = memmapfile('Dateiname.txt');
Zeilen = length(file.data(file.data==10)) + 1;
delete(file)
 

ohne Schleife herausbekommen.

Als Alternative zu
Code:
kannst du bei
Code:
die Anzahl zu überspringenden Zeilen angeben. Die option heißt glaube ich headerlines oder so ähnlich.

Grüße Schrank
Private Nachricht senden Benutzer-Profile anzeigen
 
beneklaus

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.10.2009, 18:13     Titel:
  Antworten mit Zitat      
Hallo Schrank und Denny,

Danke, das tut soweit. Was noch schön wäre:

Mit fseek muss ich mit bytes arbeiten. Leider schwanken die Bytes je Zeile stark-> Kann meinen Bereich nicht stark einschränken.

Headerlines bei textscan tut, kann da jedoch nur con Dateianfang bis Zeile xxx einlesen und nicht von Zeile xxx bis Dateiende.->Jemand eine Idee?

Ansonsten Danke für die Antworten,
beneklaus
 
Schrank
Forum-Century

Forum-Century


Beiträge: 203
Anmeldedatum: 10.07.08
Wohnort: Berlin
Version: ---
     Beitrag Verfasst am: 22.10.2009, 09:39     Titel:
  Antworten mit Zitat      
Hallo beneklaus,

verstehe dein Problem nicht ganz. Mit Headerlines gibst du die Anzahl zu überspringenden Zeilen an und erst ab dieser Zeile wird eingelesen.
Das willst du doch, oder?

Könntest du ein Minimalbeispiel einstellen, damit ich/wir dein Problem nachvollziehen können.

Grüße
Schrank
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.02.2011, 14:13     Titel:
  Antworten mit Zitat      
Gibt es eine Funktion die quasi das Gegenstück zu Headerlines ausführt? Das heisst, dass ich nur bis zu einer gewissen Zeile die Daten einlese...
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 24.02.2011, 14:26     Titel:
  Antworten mit Zitat      
Hallo


das kannst mit TEXTSCAN erreichen. Schaue dir 3. Parameter an:
Zitat:
C = textscan(fid, 'format', N) reads data from the file, using the format N times, where N is a positive integer. To read additional data from the file after N cycles, call textscan again using the original fid.


so kann man bestimmte Anzahl Zeilen einlesen:
Code:

% 4 Zeilen einlesen
textscan(fid,'%s',4,'Delimiter','\n')
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.02.2011, 19:11     Titel:
  Antworten mit Zitat      
hmmm... textscan sollte eigentlich auch bei .dat files funktionieren oder?!
Irgendwie funktioniert das bei mir nicht.ich kriege immer ein '[0x1 double]' raus...

Das Hauptproblem besteht bei mir darin, dass mein .dat file insgesamt ca 220MB gross ist (mein Rechner ist dann schon out of Memory...).
Das heisst ich möchte von Anfang an nur einen kleinen Anteil der file importieren (da ich nur die ersten paar tausend Datenpunkte brauche)
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 25.02.2011, 14:44     Titel:
  Antworten mit Zitat      
Hallo
TEXTSCAN funktioniert mit allen ASCII-Formaten.

Zum Nachvollziehen Bitte den Code immer Eingeben. Und Vielleicht einige Beispiel Zeilen aus deinem DAT-File hier posten
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.