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

Out of memory Problem bei SEHR großen .txt Daten lesen

 

Burger

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.11.2012, 21:30     Titel: Out of memory Problem bei SEHR großen .txt Daten lesen
  Antworten mit Zitat      
Hallo zusammen,

ich habe ein Problem, welches ich dringen lösen muss:
Ich habe für meinen Betreuer ein Programm geschrieben, welches Datenverarbeitung machen soll. dafür müssen zuerst Messgrößen eingelesen werden. Die Daten liegen als .txt Files vor, wobei eine einzelne Spalte genau einer Messgröße entspricht. Gemessen werden mehrere Zyklen hintereinander weg, jeder Zyklus hat 14400 Messdaten und es werden bis zu 800 Zyklen hintereinander aufgezeichnet, ich habe also sehr große Datenmengen (600MB pro .txt File ist keine Seltenheit)

Es werden bis zu 8 Messdaten aufgezeichnet, und das Problem ist, dass mein Betreuer (XP, 32bit Matlab 2012b) die DAten nicht eingelesen bekommt,
Code:

a=dlmread(vollstaendigerPfad, '\t',header,0);
 

verursacht auf seinem System ein "out of memory Problem".

ich habe in Foren gelesen, dass es eine Funktion gibt, mit der man große Datenmengen spaltenweise einlesen kann, ohne das ganze FIle in den Workspace zu laden:
http://stackoverflow.com/questions/.....rge-files-150mb-in-matlab

jetzt habe ich versucht, diese dargestellte Funktion zu verwenden:

Code:
clc;
clear all;
[Dateinamen, Path]=uigetfile('*.txt','MultiSelect', 'on');
Dateinamen=cellstr(Dateinamen);
Anzahl_Dateien=size(Dateinamen,2);    
Mittel_ges = zeros(Anzahl_Dateien,20);
for Datei = 1 : Anzahl_Dateien;
    filename = char(Dateinamen(1, Datei));
    filename_ohne_endung=strrep(filename,'.txt','');                          
    vollstaendigerPfad = fullfile(Path,filename);
    %komma2punkt konvertierung
    Name=textscan(vollstaendigerPfad,'%s%s','delimiter','.');
    NewFile=strcat(Name{1}, '_mod.',Name{2});
    copyfile(vollstaendigerPfad, NewFile{1});
    file    = memmapfile(NewFile{1},'Writable',true);
    comma   = uint8(',');
    point   = uint8('.');
    file.Data(( file.Data==comma)' ) = point;
    vollstaendigerPfad=strcat(Path,filename_ohne_endung, '_mod.txt');
   
end

%Einlesen
blocksize = 14400;
startrow = 25;
matObj = matfile(vollstaendigerPfad,'Writable',true);
while true
    try
        a = dlmread(vollstaendigerPfad,'\t',startrow,0); %# depends on your file format
        startrow = startrow + blocksize;
        matObj.a(startrow+(1:blocksize),:) = a;
    catch
        break
    end
end




damit bekomme ich aber gesagt:
Code:

Error using internal.matlab.language.isPartialMATArrayAccessEfficient
Unable to read MAT-file
C:\Daten\Hiwi\beta\4000rpm_GB_2012_11_19_0001_mod.txt: not a binary
MAT-file.


Error in matlab.io.matfile.Properties (line 44)
                obj.SupportsPartialAccess =
                internal.matlab.language.isPartialMATArrayAccessEfficient(obj.Source);
               
Error in matlab.io.MatFile (line 410)
            obj.Properties =
            matlab.io.matfile.Properties(resolveSource(Source));

Error in matfile (line 75)
mf = matlab.io.MatFile(varargin{:});

Error in zwischenablage (line 27)
matObj = matfile(vollstaendigerPfad,'Writable',true);


ich verstehe zwar, dass das file dass ich einlesen will kein MAT file ist, aber in der doku wird nicht gesagt dass diese funktion nur für .mat files gilt...

kann mir jemand mit erfahrung auf dem gebiet helfen wie ich aus den Rohdaten einzelne Spaltenvektoren einlesen kann ohne die gesamten daten auf einen schlag einlesen zu müssen?

Vielen Dank

Burger


dmjr
Forum-Century

Forum-Century


Beiträge: 199
Anmeldedatum: 02.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.11.2012, 21:43     Titel:
  Antworten mit Zitat      
Code:
matObj = matfile(vollstaendigerPfad,'Writable',true);


Hier verwendest du eine Funktion für MAT-Dateien mit einer txt-Datei
Private Nachricht senden Benutzer-Profile anzeigen
 
Burger

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.11.2012, 21:49     Titel:
  Antworten mit Zitat      
ich kann ein kleines Testdatenfile mit Messzyklen anhängen, das würde wohl helfen...

4000rpm_GB_2012_11_19_0001.txt
 Beschreibung:

Download
 Dateiname:  4000rpm_GB_2012_11_19_0001.txt
 Dateigröße:  3.5 MB
 Heruntergeladen:  409 mal
 
Burger

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.11.2012, 21:58     Titel:
  Antworten mit Zitat      
dmjr hat Folgendes geschrieben:
Code:
matObj = matfile(vollstaendigerPfad,'Writable',true);


Hier verwendest du eine Funktion für MAT-Dateien mit einer txt-Datei


erstmal Danke dass du dich meiner annimmst!

in der MAtlab doku habe ich gelesen:

"filename can include a full or partial path, otherwise matfile searches for the file along the MATLAB search path. If filename does not include an extension, matfile appends .mat."

auch in dem anderen Forum wurde darauf verweisen dass man auch .txt files einlesen kann. weißt du wie ich das dann machen muss?

Viele Grüße
 
dmjr
Forum-Century

Forum-Century


Beiträge: 199
Anmeldedatum: 02.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.11.2012, 22:21     Titel:
  Antworten mit Zitat      
In der dort angegebenen Matfile wird gespeichert, nicht gelesen. Das muss eine andere als die gelesene Textfile sein.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 20.11.2012, 22:38     Titel:
  Antworten mit Zitat      
Hallo,

ich würde textscan verwenden. Damit kannst du blockweise einlesen und die Größe der Blöcke, die du verwendest, kontrollieren.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.11.2012, 23:05     Titel:
  Antworten mit Zitat      
Vielen Dank, so hat es geklappt!!
 
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.