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

Automatisiertes Plotten und Speichern von CSV-Dateien

 

Chris99999

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.09.2015, 14:48     Titel: Automatisiertes Plotten und Speichern von CSV-Dateien
  Antworten mit Zitat      
[/code]Hallo liebes Forum!

Als Anfänger in der Matlab-Welt tue ich mich gerade sehr schwer und hoffe auf eure Hilfe, ich denke das Problem ist schnell zu lösen:
Ich möchte gerne um die 50 Datensätze als csv-Dateien hintereinander automatisch einlesen und plotten entsprechend meiner Vorgaben. Ich habe es schon geschafft, dass ich das Verzeichnis beliebig wählen kann und eine Auflistung aller Dateien bekomme, die in diesem Verzeichnis liegen.

Code:
pathname = uigetdir('', 'Verzeichnis wählen');
 if pathname == 0                          
  return
 end
 
 Mdir = dir(pathname);
 nbentries = size(Mdir, 1);
 Mfiles = [];
 for entry_i = 1:nbentries
  if Mdir(entry_i).isdir == false

    filename = Mdir(entry_i).name;
    if filename(1) ~= '.'
      [p, n, ext] = fileparts(filename);
      if strcmpi(ext, '.csv')
        Mfiles = strvcat(Mfiles, filename)
      end
    end
  end
 end
 nbfiles = size(Mfiles, 1)


Als nächstes müsste ich eine Schleife programmieren, die auf die angezeigten Dateien nach und nach Bezug nimmt und diese bearbeitet. Bearbeiten heißt: Entsprechend meiner Wünsche formatieren, beschriften usw., und dann als png und epsc mit am besten "Diagramm" und der fortlaufenden Nummer abspeichert. Aber ich kriege die Fragmente einfach nicht zusammen. Sad Wäre jemand so lieb und könnte mir helfen?

Code:
for k = 1:nbfiles
   
     
    data=dlmread([,';')    %Alle Zeilen/Spalten einlesen mit Trennung ';
   
   
   
    data=dlmread([B(k)],';')    %Alle Zeilen/Spalten einlesen mit Trennung ';
    disp [('datensatz1.csv') ' saved')]
    fig = figure('Visible', 'off');
   
    %Hier weiteren Programmablauf um den Plot zu formatieren
   
    plot(data(:,1),data(:,2));  %Spalte 1 als X, Spalte 2 als Y  
    print(fig, '-dpng', '-noui', ['Diagramm' num2str(k)]);
    %rint(fig, '-depsc', '-noui', ['Diagramm' num2str(k)]);
    close(fig);
end


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 22.09.2015, 18:39     Titel:
  Antworten mit Zitat      
Hallo,

was passiert denn mit den Codefragmenten? Ohne Beispieldateien ist es schwierig, dir da weiterzuhelfen.

Den ersten Teil sollte man übrigens so vereinfachen können:
Code:
files = dir(fullfile(pathname, '*.csv'));
fileNames = {files.name};


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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.09.2015, 21:44     Titel:
  Antworten mit Zitat      
Hallo Harald!

Vielen Dank für Deine Antwort! Zunächst einmal muss ich mich als völliger Matlab-Anfänger outen, und leider fehlen mir (noch) die Basics, um mit dem Programm halbwegs vernünftig arbeiten zu können. Entschuldige bitte daher, dass ich mein Anliegen eher so aufschreibe als in Code-Form. Folgende Aufgabenstellung habe ich zu bewerkstelligen:

In einem Verzeichnis werden etliche Datensätze hinterlegt als CSV-Datei, darin jeweils x- und y-Werte. Die Dateien heißen alle "Datensatz1.csv" und dann mit fortlaufender Nummer. Mal sind es nur fünf Dateien, mal fünfzig oder mehr. Da ich gerne immer ein einheitlich formatiertes Diagramm für jeden einzelnen Datensatz erstellt habe möchte ("Diagramm1.png" sowie "Diagramm1.epsc" und fortlaufend), kam mir die Idee dieses Problem mit Matlab anzugehen. Die genaue Formatierung der Diagramme ist jetzt erstmal egal.

Zunächst habe ich den oberen Code gefunden und modifiziert, so dass ich aufgefordert werde ein Verzeichnis auszuwählen. In diesem Verzeichnis befinden sich die Datensatz1.csv, Datensatz2.csv usw.

Code:
pathname = uigetdir('', 'Verzeichnis wählen');
 if pathname == 0                          
  return
 end
 
 Mdir = dir(pathname);
 nbentries = size(Mdir, 1);
 Mfiles = [];
 for entry_i = 1:nbentries
  if Mdir(entry_i).isdir == false

    filename = Mdir(entry_i).name;
    if filename(1) ~= '.'
      [p, n, ext] = fileparts(filename);
      if strcmpi(ext, '.csv')
        Mfiles = strvcat(Mfiles, filename)
      end
    end
  end
 end
 nbfiles = size(Mfiles, 1)


Ich bekomme also eine Auflistung aller CSV-Dateien im Verzeichnis. Als nächstes möchte ich gerne nacheinander jede einzelne Datei öffnen (Datensatz1.csv, Datensatz2.csv usw.), die zwei Spalten für x und y auslesen, und daraus einen Graph plotten sowie in zwei Dateiformaten speichern. Das Abspeichern erfolgt dann als "Diagramm1", "Diagramm2" usw.

Nur: Wie kann ich auf die in den CSV-Dateien enthaltenen x/y-Spalten zugreifen, die mir oben im Rahmen von

Code:
  Mfiles = strvcat(Mfiles, filename)


und

Code:
nbfiles = size(Mfiles, 1)


angezeigt werden?

Wenn ich eine einzelne Datei manuell auswähle, z.B. Datensatz1.csv, dann nehme ich einfach den Befehl:

Code:
data=dlmread('datensatz1.csv',';');    %Alle Zeilen/Spalten einlesen mit Trennung ';'


Klappte alles wunderbar, nur wie mache ich das mit fortlaufendem Dateinamen? Also Datensatz1.csv, dann Datensatz2.csv usw. Oder gibt's da insgesamt eine elegantere Lösung? Crying or Very sad

Vielen vielen Dank auf jeden Fall schonmal für Deine Hilfe!
 
Jan S
Moderator

Moderator


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

Zitat:
Klappte alles wunderbar, nur wie mache ich das mit fortlaufendem Dateinamen? Also Datensatz1.csv, dann Datensatz2.csv usw. Oder gibt's da insgesamt eine elegantere Lösung? Crying or Very sad

das klingt nach einem Standard-Problem, oder? Das hat doch bestimmt schon mal jemand anderes gefragt. Wahrscheinlich sogar öfters. Und in der Tat: Es ist Bestandteil der Matlab FAQ, der frequently asked questions. Es lohnt sich also, einfach mal die Lieblings-Internetsuchmaschine danach zu fragen: "Matlab fortlaufende dateinamen" oder auch "Matlab FAQ".

Code:
for k = 1:10
  data = dlmread(sprintf('Datensatz%d.csv', k), ...);
  ...
end

Der Tipp mit den FAQ ist noch viel allgemeiner: Da stehen noch weitere Schätze drin und es ist sehr effizient und erholsam, von den Fehlern zu lernen, die andere schon für einen erledigt haben. Wink
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.