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

.csv Datei filtern und in Matrix speichern

 

ueg
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 51
Anmeldedatum: 15.08.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.08.2019, 18:06     Titel: .csv Datei filtern und in Matrix speichern
  Antworten mit Zitat      
Aktuelle Codes siehe Edit unten, die Codes oben stimmen so nicht mehr. Wink

Guten Tag liebe Matlab-Profis,

ich sitze momentan an einem Problem das meine nicht vorhandenen Matlab-Künste sehr strapaziert.

Ich habe an der Uni Messungen mit einem Oszilloskop durchgeführt (einen ziemlichen Haufen). Das hat 2 Channel und die Zeit in .csv-Dateien exportiert.
Der Aufbau der Daten in den CSV-Dateien (ich hänge wenn es geht eine an) ist folgendermaßen.
Oben steht ein paar Zeilen lang Text, dann sind die eigentlichen Daten nach dem Schema
1;2;4
5;6.7897;9E-8
usw aufgebaut.
Also jeweils die 3 Messdaten in einer Zeile mit einem Semicolon getrennt, dann in der nächsten Zeile die nächsten zusammengehörenden Messdaten.

Aus diesen Dateien möchte ich Schaubilder erstellen. Mein größtes Problem ist dabei, dass sich aus mir absolut unerklärlichen Gründen mitten in den Messdaten Zeilen wie
1. Apr;3;5 also ein "datum" versteckt. Die Daten gehen dabei alle Monate mehrfach durch.
Weiterhin sind die ersten paar Zeilen auch Text und keine Zahlen.

Ich habe mir ein Skript geschrieben, das aus einer bereinigten (bisher Handarbeit zum Testen) Datei ein Schaubild erzeugt und dieses einmal als .fig und einmal als .jpg abspeichert.
Nur kann ich bei den zig Messungen nicht alle Dateien von Hand (jeweils 100.000 Messdaten als Zeilen) im Editor nach Buchstaben durchsuchen.

Ein Versuch meinerseits die Daten mit folgendem Code auszulesen hat so halbwegs funktioniert.

Code:

Datei = fopen ('C:\xxx\Testverzeichnis Matlab\Einlesen.csv');

AusgeleseneDaten = {};

while ~feof(Datei) %checkt ob Datei am Ende ist
    Zeile = fgetl(Datei); %Zeile auslesen
     [ausgeleseneZahl, Zahlodernicht] = str2char(Zeile);
   
     if Zahlodernicht == 1  
         AusgeleseneDaten = [AusgeleseneDaten ; ausgeleseneZahl];
       
   
        else        
        disp('Zeile mit Buchstaben');
    end
       
end


Damit bekomme ich ein Cell-Array in dem alle ausgelesenen Zeilen in denen nur Zahlen stehen abgespeichert sind.
Wie ich aus dem Cell-Array dann eine darstellbare Matrix bekomme, wäre dann der nächste Schritt, aber so weit kam ich gar nicht erst.
Die Messdaten bestehen aus jeweils 100.000 Zeilen und das Skript läuft so furchtbar langsam, dass es so auf keinen Fall gehen kann. Da sitze ich bestimmt 2 Minuten an einer Datei und ich habe bestimmt einige Hundert. :p
Ein weiteres Problem ist, dass die Messgenauigkeit des Oszilloskops für meine Begriffe die Genauigkeit bzw. Speicherkapazität eine

Bitte nicht über mein Skript lachen, ich habe bisher Matlab nur für Matrizenrechnung und das Zeichnen von Schaubildern benutzt.
Hätten die csv-Dateien nicht noch Text zwischendrin wäre das alles auch kein Problem.

Also long story short:
Hat jemand von euch eine Idee wie ich schnell die einzelnen Zeilen der Datei in welchen sich nur Zahlen befinden (mit Semicolons zum Trennen, Punkten als Kommas (z.B. 9.2) und teilweise in E-Schreibweise, also 8E-6) in eine plottbare Matrix packen kann?

Weiterhin hatte ich gerade Probleme die Dateien mit uiopen also mit
Code:

Datei = uiopen(xxx)
 

zu öffnen und dann weiter zu benutzen. Im anderen Testprogramm zum Plotten der bereinigten Datei hat das mit uigetfile super geklappt. Aber das kann ich mir selbst noch einmal anschauen. Da finde ich bestimmt eine Lösung.

Viele Grüße
Tim


Großes Edit:

Ich habe bemerkt, dass ein Cell-Array für meine Aufgabe eher blöd ist, da ich ja sowieso nur mit Zahlen arbeite.
Schlussendlich bin ich nach einigem Rumprobieren bei dem Code gelandet.
Der braucht nur einige Sekunden um die Matrix zu füllen.

Falls mir jetzt noch jemand sagen könnte, wie ich wenn ich das Skript starte selbst die Datei auswählen kann, die bearbeitet werden soll, wäre ich super happy. Noch besser wäre es nur, direkt alle *.csv Dateien in einem gewünschten Verzeichnis nacheinander einzeln zu öffnen, damit zu rechnen und sie anschließend wieder zu schließen.

Mein Code ist momentan folgender (falls noch jemand Verbesserungspotenzial sieht welches es sicher gibt, gerne her damit. Ich lerne gerne Very Happy):

Code:
clc; %nur zum Debuggen, dass sich die Fehlermeldungen nicht häufen, am Ende nicht mehr benötigt.
clear all;
Datei = fopen ('C:\xxx\test.csv');

z=1;
Matrix = nan(100000,3);
while ~feof(Datei) %checkt ob Datei am Ende ist
    Zeile = fgetl(Datei); %Zeile auslesen
     [ausgeleseneZahl, Zahlodernicht] = str2num(Zeile);

     if Zahlodernicht == 1  

         Matrix(z,:)= ausgeleseneZahl;
         z = z+1;
    else
       
        disp('Zeile übersprungen.');
     end    
end
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

Tables sind für solche Fälle an sich hilfreich. Sind diese Datumsangaben denn schon im Datensatz enthalten?

uigetfile hilft für die Dateiauswahl.

Für das Verarbeiten aller Dateien würde ich dir und dann eine for-Schleife verwenden.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
ueg
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 51
Anmeldedatum: 15.08.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.08.2019, 18:37     Titel:
  Antworten mit Zitat      
Hallo Harald,

schon einmal vielen Dank für deine Antwort.
Ich probiere das mit uigetfile gleich mal aus.
In meinem anderen Skript an dem ich das Schaubilder-Erstellen geübt habe, habe ich mti uigetfile 3 variablen belegt. Einmal den Dateinamen, dann den Pfad und irgendeine mitlaufende Variable glaube ich.
Ich schaue mal ob ich auch einfach
Code:

wie gerade eben benutzen kann.

Die "Datumsangaben" sitzen einfach komplett sinnlos mitten in den Messdaten. Das ist auch kein aktuelles Datum da sind einfach mittendrin Zeilen wie
[1.Mrz;irgendwas;irgendwas]
Das geht den Kalender ein paar mal über die 100.00 Zeilen durch. Keine Ahnung woher die eigentlich kommen. Da wird wohl das Programm des USB-Oszilloskop einen weg gehabt haben. Bestimmt war es ein Bedienungsfehler von mir. Wink

dir und die Schleife werde ich mir mal noch anschauen. Die Messdaten sind aber nicht durchnummeriert, sondern haben unterschiedliche Namen je nachdem was gemessen wurde. Sie liegen nur in den selben Ordnern.

Viele Grüße
Tim

Edit: Dir scheint mir die ganze Liste an Daten auszugeben die in dem gewählten Verzeichnis liegen. Damit kann ich bestimmt was anfangen. Danke vielmals.

Nächster Edit: jetzt kann ich die Datei selbst auswählen.

Code:
[filename, pathname, filterindex] = uigetfile('C:\xxx\test.csv', 'Wähle deine Datei');

ausgewaehlteDatei = [pathname filename];
Datei = fopen (ausgewaehlteDatei);


Und die abgespeicherten .fig und .jpg Dateien kann ich über die Variable "filename" auch direkt entsprechend benennen.
Langsam wird's. Smile

Nächster Edit:

Das ist momentan der Stand. Das Skript lässt mich eine Datei auswählen und erstellt dann automatisch benannte .jpg und .fig Dateien in 2 Ordner die erstellt werden, solange sie nicht vorhanden sind.
Btw. weiß jemand wie ich die Meldung "Warning: Directory already exists." weg bekomme? Falls der Order schon existiert, erstellt mkdir ja keinen neuen Ordner. Daher kann ich so auch keine Daten verlieren.

Code:
[filename, pathname, filterindex] = uigetfile('C:xxx\*.csv', 'Wähle deine Datei');

ausgewaehlteDatei = [pathname filename];
Datei = fopen (ausgewaehlteDatei);

%Daten einlesen
z=1;
Matrix = nan(100000,3);
while ~feof(Datei) %checkt ob Datei am Ende ist
    Zeile = fgetl(Datei); %Zeile auslesen
     [ausgeleseneZahl, Zahlodernicht] = str2num(Zeile);

     if Zahlodernicht == 1  

         Matrix(z,:)= ausgeleseneZahl;
         z = z+1;
    else
       
        disp('Srsly.. Warum stand da Text?..');
     end    
end



%Name der neuen Dateien
NameohneEndung = filename(1:end-4);
NamemitJPG = [NameohneEndung '.jpg'];
NamemitFig = ['\' NameohneEndung '.fig'];


%Ordner für Ablage der Bilder/Schaubilder

ZielpfadSchaubild = [pathname 'Schaubilder'];
ZielpfadJPG = [pathname 'JPEG Bilder\'];
NeueDateiJPEG = [ZielpfadJPG NamemitJPG];
NeueDateiFig = [ZielpfadSchaubild NamemitFig];

%Einlesen der Daten aus ausgewählter Datei

    Zeit = Matrix(:,1);
    Anregung = Matrix(:,2);
    Antwort = Matrix(:,3);
   
   
%Schaubild erstellen
figure('Name', NameohneEndung, 'NumberTitle', 'off');
plot(Zeit, Anregung, 'b', Zeit, Antwort, 'r');


%Dateien abspeichern

mkdir(ZielpfadJPG);
mkdir(ZielpfadSchaubild);
saveas(figure(1), NeueDateiJPEG);

savefig(NeueDateiFig);
 


Nur das mit dem saveas als JPG sollte ich mir vielleicht mal noch anschauen. Mit print bekomme ich glaube ich eine bessere Auflösung hin...
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

du kannst mit isfolder überprüfen, ob es ein Verzeichnis gibt.

Einträge wie 1.Mrz kann durch Interpretationsfehler aus 1.3 entstehen. Mir ist das Phänomen aber eigentlich nur bei .xls(x), nicht bei .csv bekannt.

Gibt es noch andere offene Fragen?

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
ueg
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 51
Anmeldedatum: 15.08.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.08.2019, 20:31     Titel:
  Antworten mit Zitat      
Also mein Skript läuft inzwischen wie oben beschrieben.
Ich starte es, es fragt mich nach einer Datei und es gibt dann sowohl eine Fig als auch ein JPEG in die 2 (falls nicht vorhanden) erstellten Ordner aus.
So weit so gut.

Jetzt habe ich mich allerdings an das automatisierte Auswählen gesetzt.

Mit folgendem Anfang:

Code:
B = uigetdir('C:\Users\Tim\Desktop\Testverzeichnis Matlab\*.csv'); %er fragt mich welcher Ordner angeschaut werden soll
M = dir(B); %er öffnet den Ordner und speichert den Inhalt in M
Dateiname = {M.name}; %Die Namen der vorhandenen Dateien
p=numel(Dateiname); %Anzahl der Dateien im Ornder

for k=1:numel(Dateiname) %Ausführen so oft wie es Dateien gibt

CODE    
   
end


So weit so gut. Das große Problem das ich nun habe ist, dass mir der Befehl

Code:

Drei Variablen ausgegeben hat von denen ich die ersten 2 verwendet habe
Code:
[filename, pathname, filterindex] = uigetfile('C:\xxx\test.csv', 'Wähle deine Datei');


Die verwendeten Variablen "filename" und "pathname" sind in ähnlicher Form auch in M gespeichert. Allerdings ist M vom Typ "struct" und damit komme ich überhaupt nicht klar.
Ich bekomme es einfach nicht gebacken auf den Namen und den Pfad der aktuell zu öffnenden Datei in M zuzugreifen...

Ich müsste die Zeile oben mit [filename...] = uigetfile ... so abändern, dass automatisch eine Datei nach der anderen geöffnet wird. Der Pfad und der Name dazu liegen in der "struct"-Variable M, das kann ich sehen wenn ich sie im Workspace öffne, aber ich bekomme das nicht extrahiert. Weiterhin ist es wichtig, dass ich den Namen sowie den Pfad der Datei als Variable abspeichern kann mit der ich später die Ordner der abgespeicherten Bilder sowie deren Namen automatisch erstellen lassen kann.

Außerdem bräuchte ich dann eine Funktion die wie uigetfile mir die Datei öffnet. Ich weiß nicht mehr welche, aber die die ich heute Mittag probiert hatte, hat sich über irgendetwas beschwert...

Am meisten wurmt mich allerdings dass ich es nicht hinbekomme auf die in der Struct-Variablen (wenn man das so sagt) richtig zuzugreifen.
Wenn man sich das "struct" im Workspace anschaut, hat es die Größe 34x1 und wenn ich es öffne habe ich eine Spalte mit "Fields" die durchnummeriert ist, eine Spalte mit "name" in der die Dateinamen sind (die brauche ich) und eine Spalte mit "folder" mit dem Pfad (brauche ich auch) dahinter gibts noch das Datum (uninteressant) die Größe in bytes (uninteressant) und isdir (interessant, da für Ordner der Rest nicht mehr durchgeführt werden soll, aber da habe ich vorhin was von "isdir" gelesen, den Check bekomme ich sicher irgendwie hin..) Smile
Ich probiere mich mal weiter im Zugreifen auf den struct aus..

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

Forum-Meister


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

wenn ich die Felder richtig im Kopf habe:
Code:
M(k).name
M(k).folder

Das am besten mit fullfile zusammenfügen.

Sinnvoller erscheint mir übrigens:
Code:
B = uigetdir('C:\Users\Tim\Desktop\Testverzeichnis Matlab'); %er fragt mich welcher Ordner angeschaut werden soll
M = dir(fullfile(B, '*.csv'); % nur .csv -Dateien


Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
ueg
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 51
Anmeldedatum: 15.08.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.08.2019, 21:28     Titel:
  Antworten mit Zitat      
Vielen Dank für die Hilfe, das mit dir(fullfile ... *csv) hat mir gerade ein Problem gelöst, das vorher noch nicht auftrat.

Beim Rumprobieren wie ich die anderen Dateien am besten automatisch öffnen lasse, hat mir zufällig

Code:


einen Struct ausgespuckt der schon automatisch in "data", "textdata" und "colheaders" separiert war.

In "Textdata" war wie der Name vermuten lässt alles was keine Zahlen oder nicht die "colheader" die Spaltenüberschriften war.

Mit
Code:

Daten = importdata(Pfad);
Matrix = Daten.data;


Bekomme ich direkt die ganzen Messdaten in eine Matrix, da die Funktion "importdata" mir das so schön aufgeschlüsselt hat.

Meine ganzen aufwendigen Programmierereien heute Morgen hätte ich mir sparen können, wenn ich direkt auf "importdata" gestoßen wäre.
Ich habe es dann auch hinbekommen auf die Daten im "struct" zuzugreifen und sie in der "double" Variablen "Matrix" zu speichern.

Jetzt muss ich nur noch den Code schön schreiben und den Teil der die Verzeichnisse etc erstellt hinzufügen, dann sollte alles passen.

Wenn es jemandem hilft, stelle ich gerne den Code rein wenn ich fertig bin. Vielleicht hat ja mal jemand das selbe Problem.

Vielen Dank noch einmal für die großartige Hilfe!
Viele Grüße und einen schönen Abend
Tim
Private Nachricht senden Benutzer-Profile anzeigen
 
ueg
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 51
Anmeldedatum: 15.08.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.08.2019, 22:08     Titel:
  Antworten mit Zitat      
Hier noch mein fertiger Code. Ich bin der Meinung, dass an sich das "k" in der for-Schleife noch irgendwo hochzählen müsste, aber das macht es wohl von alleine. Es funktioniert auf jeden Fall so und dann will ich's gar nicht weiter anfassen. Very Happy

Die Schaubilder muss ich die Tage mal noch hübscher machen, so mit Achsenbeschriftungen etc.
Aber für heute reicht's mir. Daran saß ich jetzt bestimmt 10h mit meinen miserablen Matlab-Künsten. Wink

Code:
warning('off', 'MATLAB:MKDIR:DirectoryExists');                             %Gibt nicht ständig die Fehlermeldung aus, dass der Ordner zum Speichern schon erstellt wurde

AusgewaehlterOrdner = uigetdir();                                           %Ordner auswählen in dem die Dateien liegen
AlleDateienimOrdner = dir(fullfile(AusgewaehlterOrdner, '*.csv'));          %Ausgewählter Ordner wird geöffnet und Dateien aufgelistet
AlleDateinamen = {AlleDateienimOrdner.name};                                %Alle Dateinamen werden aufgelistet
AnzahlcsvDateien=numel(AlleDateinamen);                                     %Anzahl von .csv-Dateien wird abgefragt
Laufindex=1;                                                                %Laufindex zur Auswahl der einzelnen Dateien



    for k=1:AnzahlcsvDateien                                                %Für so viele *.csv-Dateien wie es gibt das Nachfolgende ausführen
        Testobordner = {AlleDateienimOrdner.isdir};                         %liest in der Spalte des Struct aus ob ein Ordner vorliegt oder nicht
        Ordnerodernicht = Testobordner{Laufindex};                          %umwandeln von Cell in logical

        if Ordnerodernicht == 0                                             %nur für Dateien ausführen die keine Ordner sind (sollten aber weil nur .csv-Dateien angezeigt werden, sowieso keine Ordner sein)
            EinzelnerDateiname = AlleDateinamen{Laufindex};                 %Name der Datei
            Dateipfad = {AlleDateienimOrdner.folder};                       %Pfade aller Dateien
            Pfad = Dateipfad{Laufindex};                                    %Pfad der aktuellen Datei
            gesamt = [Pfad '\' EinzelnerDateiname];                         %Pfad und Dateiname verbunden
            Messwerte = importdata(gesamt);                                 %Messwerte extrahieren        
            NameohneEndung = EinzelnerDateiname(1:end-4);                   %.csv abschneiden

           
%Matrix aus Messdaten erzeugen

            Matrix=Messwerte.data;
           
%Spalten/Achsen benennen

            Zeit = Matrix(:,1);
            Anregung = Matrix(:,2);
            Antwort = Matrix(:,3);
           
           
%Schaubilder erzeugen        
             figure('Name', NameohneEndung, 'NumberTitle', 'off');
             plot(Zeit, Anregung, 'b', Zeit, Antwort, 'r');
             
%Name der neuen Dateien
             NamemitJPG = [NameohneEndung '.jpg'];
             NamemitFig = [NameohneEndung '.fig'];


%Ordner für Speicherorte
            ZielpfadSchaubild = [AusgewaehlterOrdner '\Schaubilder\'];      %Später Ordner "Schaubilder" in gewähltem Ordner erstellen
            ZielpfadJPG = [AusgewaehlterOrdner '\JPEG Bilder\'];            %Später Ordner "JPEG Bilder" in gewähltem Ordner erstellen
            NeueDateiJPEG = [ZielpfadJPG NamemitJPG];                       %Dateiname und Endung an Pfad anhängen
            NeueDateiFig = [ZielpfadSchaubild NamemitFig];                  %Dateiname und Endung an Pfad anhängen
             
             
%Speicherorte erstellen

            mkdir(ZielpfadJPG);                                             %Ordner für Bilder erstellen falls nicht vorhanden
            mkdir(ZielpfadSchaubild);                                       %Ordner für .fig-Dateien erstellen falls nicht vorhanden
           
%Dateien abspeichern            
            saveas(figure(1), NeueDateiJPEG);
            %print(figure(1), '-r500', '-djpeg', filename ,ZielpfadJPG);    Noch anschauen wie das mit print und jpgs genau funktioniert --> bessere Auflösung als "save"              
             savefig(NeueDateiFig);

             
             
            Laufindex=Laufindex+1;                                          %Nächste Datei auswählen
            close all;
        end
    end



 
Private Nachricht senden Benutzer-Profile anzeigen
 
sijuherm
Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 01.08.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.08.2019, 09:57     Titel:
  Antworten mit Zitat      
Danke für das bereitstellen des Codes! Funktional habe ich das jetzt nicht überprüft, nur 2 Tipps für die Zukunft:

1. Die Laufvariable in der Schleife: Die Laufvariable k wird gar nicht verwendet in deinem Code (und sie wird entgegen deiner Vermutung automatisch hochgezählt). Du hast dir statt dessen selbst eine Variable angelegt, die du manuell hochzählst. Du könntest innerhalb der Schleife Laufindex durch k ersetzen (und das manuelle hochzählen am Schleifenende herausnehmen), und es würde genausogut funktionieren mit weniger Aufwand für dich. Wink

2. Deaktivieren der Warnung: Anstatt die Warnung zu deaktiveren könntest du auch vor dem erstellen des Verzeichnisses überprüfen, ob das bereits existiert:
Code:
if ~isfolder(ZielpfadJPG)
    mkdir(ZielpfadJPG);
end
Private Nachricht senden Benutzer-Profile anzeigen
 
ueg
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 51
Anmeldedatum: 15.08.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.08.2019, 11:03     Titel:
  Antworten mit Zitat      
Es ist bestimmt nicht sehr sauber programmiert, aber der Code tut zumindest für mich was er soll. Wink

Was man sich noch anschauen könnte ist, dass ich mit
Code:

Die Abbildung als JPEG abspeichere, obwohl ich die figure eigentlich oben anders benannt habe. Wenn ich den neuen Namen der figure beim Speichern angegeben habe, gab es eine Fehlermeldung. Da weiß ich nicht wie ich richtig auf die figure zugreife.
So als Notlösung funktioniert es gerade.
Wenn man die figures nicht direkt wieder geschlossen haben will, müsste man die "1" in
Code:

wohl durch "k" oder "Laufindex" ersetzen und das "close all;" rausnehmen. Ich wollte aber nicht 30 figures am Ende geöffnet haben.

Das mit dem Abfragen ob das Verzeichnis bereits existiert, werde ich wohl noch einbauen. Das ist deutlich sauberer.

"k" wird bei mir nur dafür verwendet die for-Schleife zu beenden. In der Schleife selbst kommt k dann nicht mehr vor, stimmt. Ich denke ich ersetze einfach "k" durch "Laufindex" dann kann ich mit der Variablen was anfangen wenn ich sie später nocheinmal sehe.

Vielen Dank für die Anregungen!

Viele Grüße
Tim

Anmerkung:

Der Code funktioniert so nur, wenn neben den einzulesenden Daten noch Text in den csv-Dateien ist. Ansonsten werden die Daten direkt in "Messwerte" als "double" eingelesen. Darauf kann man mit
Code:
Matrix= Messwerte.data;

nicht zugreifen und man bekommt einen Fehler. Messwerte muss also ein "struct" mit der Spalte "data" sein, damit der Code funktioniert. Falls man das so nicht automatisch vorliegen hat, kann man vielleicht im Code die Variable "Messwerte" direkt als so ein struct einlesen lassen. Dann müsste das so auch für reine Messdaten-Dateien funktionieren.

Die könnte man sich allerdings direkt in eine Matrix einlesen lassen. Da bräuchte es nicht so viel Theater drum rum. 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 - 2024 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.