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

.txt-Datei zu groß ?

 

veko
Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 13.10.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.08.2014, 17:51     Titel: .txt-Datei zu groß ?
  Antworten mit Zitat      
Hall,
ich habe Messwerte in Form einer .txt-Datei. Leider ist diese riesig groß (5GB).

Wenn ich versuche sie mit diesem code einzulesen:
Code:
fid = fopen('long.txt');

data = textscan(fid,'%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f','HeaderLines',3);   %'HeaderLines',3 damit Header "überlesen wird
save('data','data')
fid  = fclose(fid);


kommt dieser Fehler:
Error using textscan
Out of memory. Type HELP MEMORY for your options.


Muss ich die Datei jetzt stückchenweise einlesen oder gibt es andere Möglichkeiten?

Viele Grüße
veko
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 04.08.2014, 20:30     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
gibt es andere Möglichkeiten?

Letztlich nur einen ausreichend großen Hauptspeicher, was hier wohl 12 bis 16 GB bedeuten wird, in Verbindung mit einem 64bit Betriebssystem. Andere Prozesse und MATLAB brauchen ja auch noch Speicherplatz, und du willst ja mit den Daten auch noch arbeiten.

Informationen zur Speicherbelegung bekommst du mit
Code:


Du könntest beispielsweise 400000 Zeilen am Stück einlesen, damit kommst du auf ~ 100 MB an Daten. Diese 100 MB verarbeiten, dann die nächsten, bis du am Ende der Datei angelangt bist.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
veko
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 13.10.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.08.2014, 20:41     Titel:
  Antworten mit Zitat      
ok, und macht es Sinn Spalte für Spalte einzulesen?
Wenn ja, wie müsste ich das in Matlab schreiben, um Spalte für Spalte aus dem .txt-Fle zu laden (bezogen auf den code den ich geposted hab)?

Gruß
veko
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 04.08.2014, 21:36     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
ok, und macht es Sinn Spalte für Spalte einzulesen?

Das kommt drauf an, in welcher Weise du die Daten verarbeiten möchtest.

Um Spalten nacheinander einzulesen:
Code:

for I=1:N % N: Anzahl der Spalten
frewind(fid);
fmt = [repmat('%*f', 1, I-1), '%f', repmat('%*f', 1, N-I)];
spalteI =  textscan(fid,fmt,'HeaderLines',3);  % überschreiben ist wichtig
% spalteI weiterverarbeiten
end


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 05.08.2014, 09:00     Titel:
  Antworten mit Zitat      
Nur um sicher zu gehen: 64 Bit MATLAB auf einem 64 Bit Betriebssystem????

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
veko
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 13.10.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.08.2014, 10:31     Titel:
  Antworten mit Zitat      
@ Andreas: Ja

ich habe das ganze jetzt mit dem Vorschlag von Harald so gelöst:

Code:

N=61; Spalten
fid = fopen('long.txt');
for I=1:61 % N: Anzahl der Spalten
frewind(fid);
fmt = [repmat('%*f', 1, I-1), '%f', repmat('%*f', 1, N-I)];
 assignin ('base',['variable_' num2str(I)], textscan(fid,fmt,'HeaderLines',4));  %dynamisches Abspeichern der einzelnen Spalten
 

end


Wenn ich Spalte für Spalte in ein neues mat-File speichere, dann klappt es.

Nochmal vielen Dank an Harald für die Hilfe!
Gruß
veko
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 05.08.2014, 10:41     Titel:
  Antworten mit Zitat      
Hallo,

ich würde dynamische Variablennamen vermeiden. Sinnvoller ist in der Regel
Code:
variable{I} = ...


Interessant ist hier, dass du mit deinem Ansatz ja letztlich doch alle Spalten gleichzeitig im Workspace zu haben scheinst?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
veko
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 13.10.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.08.2014, 10:59     Titel:
  Antworten mit Zitat      
ok danke für den Tipp,
ja das habe ich mir auch gedacht, aber wenn ich das richtig verstehe, geht Matlab ja jetzt jede Spalte durch und speichert sie separat ab, sodass ich viele kleine files hab, die nicht so viel Arbeitsspeicher benötigen (zum einlesen etc.) wie eine große?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 05.08.2014, 11:09     Titel:
  Antworten mit Zitat      
Hallo,

du legst die Variablen ja im Workspace ab, also wird schon der gesamte Speicher benötigt. Meine Vermutung wäre, dass es sich hier um einen Edge Case bei textscan handelt.

Was sagt denn memory, nachdem du alle Variablen angelegt hast? Ich würde vermuten, dass du dann nicht mehr viel Speicher frei hast, um tatsächlich mit den Daten zu arbeiten?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
veko
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 13.10.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.08.2014, 12:19     Titel:
  Antworten mit Zitat      
...noch sind nicht alle Spalten durchgelaufen....pro Spalte ist ein Zeitsignal enthalten welches ich jeweils einzeln verarbeite (Merkmalsdetektion), sodass sich die Signalgröße nachher reduziert auf die delektierten Zeitpunkte.

Gruß
veko
Private Nachricht senden Benutzer-Profile anzeigen
 
veko
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 13.10.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.08.2014, 13:23     Titel:
  Antworten mit Zitat      
Hallo,
leider ist zu meiner vorherigen Frage noch ein Problem dazu gekommen.
Ich weiß, wie ich eine bestimmte Zeilenanzahl überspringen kann (um z.B. einen Header zu ignorieren).
Wie aber kann ich die einzulesende Zeilennanzahl begrenzen.
Also den Header überspringen und dann bis Zeile 300 jede Spalte einer txt.Datei einlesen.

mein bisheriger code:
Code:
N=61; Spalten
fid = fopen('long.txt');
for I=1:61 % N: Anzahl der Spalten
frewind(fid);
fmt = [repmat('%*f', 1, I-1), '%f', repmat('%*f', 1, N-I)];
u{:} =  textscan(fid,fmt,'HeaderLines',4);  %

end


jetzt suche ich nach einer Möglichkeit die einzulesende Zeilenanzahl (pro Spalte) zu begrenzen.

Viele Grüße
veko
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 10.08.2014, 20:03     Titel:
  Antworten mit Zitat      
Hallo,

steht an sich in der Doku von textscan: nach dem Format angeben, wie oft es angewendet wird, also hier z.B.
Code:
u{:} =  textscan(fid,fmt,300,'HeaderLines',4);  %


Die Frage ist allerdings, ob du nicht mehr Zeilen auf einmal einlesen willst und wenn nicht, ob du nicht alle Spalten auf einmal holen könntest.

Grüße,
Harald
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.