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

Daten einlesen - Hänger

 

sbmiles21
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 68
Anmeldedatum: 16.02.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.04.2015, 12:44     Titel: Daten einlesen - Hänger
  Antworten mit Zitat      
Hallo zusammen,

habe einen Code geschrieben, welcehr Messdaten (.csv ) Dateien einliesst und mir diese in data_struct als Cell Array speichert.

Das klappt bis 5000 Dateien auch super. Nun habe ich jedoch 14.000, er arbeitet und bei 44% bleibt er stehen, es tut sich nichts mehr. Auch keine Fehlermeldung :/

Weiss jemand was das sein kann?

Danke

Gruss

Code:
while i3<=i
b=strjoin(filepath(1,i3));

      function ret = mycsvread(file,header=0,cols=Inf)
        if cols==Inf
          ret.values=dlmread (file ,';',header,0);
        else
          ret.values=dlmread(file ,';',header,0)(:,1:cols);
        end
        if header>0
          f=fopen(file);
            for n = 1:header
               ret.header{n}=fgetl(f);
            end
          fclose(f);
         end
      end
 %wo_y = find(B(:,6)==y);
 %eval(['b.cycle',num2str(y),' = B(wo_y,:);']);
    data_struct(i3)=mycsvread(b,3,7); % Funtionsaufruf mit b String

      header(i3,1)=cell2mat(regexp(data_struct(i3).header{1,1},'date: (.*?);','tokens')) ;
      header(i3,2)=cell2mat(regexp(data_struct(i3).header{1,1},'time: (.*?);','tokens')) ;
      header(i3,3)=cell2mat(regexp(data_struct(i3).header{1,1},'number of starts: (.*?);','tokens')) ;
      header(i3,4)=cell2mat(regexp(data_struct(i3).header{1,1},'T_S: (.*?);','tokens')) ;
      header(i3,5)=cell2mat(regexp(data_struct(i3).header{1,1},'T_E: (.*?);','tokens')) ;
 
 
  waitbar(i3 / i,h,sprintf('LOADING  RAW DATA...%.2f%%',i3/i*100));
  i3++;
 disp([num2str(i3)]);
  end
  close(h);
Private Nachricht senden Benutzer-Profile anzeigen


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 08.04.2015, 13:35     Titel:
  Antworten mit Zitat      
debugger bei der 5000. datei mal setzen und nachgucken.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
sbmiles21
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 68
Anmeldedatum: 16.02.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.04.2015, 15:29     Titel:
  Antworten mit Zitat      
Ich denke es lag am Speicher, habe es nun so gelöst das die Datei ausgelesen wird. Der Wert den ich brauche, in einem Array gespeichert wird und danach data_struct wieder gelöscht wird.


Ich lege also immer nur ein data_struct(1) an, quasi temporär.

Nun läuft es schon wesentlich besser. ABER:

Es dauert sehr lange. Gibt es eine Alternative zu dlmread? habe gelesen das dieses sehr langsam ist.

Gruss
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 12.04.2015, 03:14     Titel:
  Antworten mit Zitat      
Hallo sbmiles21,

Zitat:
Es dauert sehr lange. Gibt es eine Alternative zu dlmread? habe gelesen das dieses sehr langsam ist.

Statt theoretischer Ideen über die Performance einzelner Befehle ist der Profiler die beste Methode um heraus zu bekommen, wo wirklich die meiste Zeit benötigt wird. Erst wenn der Profiler auch DLMREAD als Flaschenhals erkennt, lohnt es sich darüber nachzudenken.
Wenn aber nur 5% der Rechenzeit in DLMREAD stecken, wird es sich kaum lohnen, hier etwas effizienteres zu verwenden.

Gruß, Jan
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.