Verfasst am: 29.06.2017, 11:55
Titel: e (exponential) und +/- in Zahl --> NaN
Hallo zusammen,
es liegen mir mehrere .dat-Dateien vor, diese möchte ich über eine Funktion in eine .csv-Datei umwandeln.
Die .dat-Dateien liegen wie im Anhang vor (8 Spalten, +0.0000e+000).
Das Problem liegt hier damit in der csv-Datei immer nun NaN kommt...
Ich vermute mal es liegt einfach daran, damit in der Zahl +/- bzw e (Exponent) vorkommt.
Ich habe das + einfach mit strrep entfern, das minus kann ich natürlich nicht einfach entfernen.
Das nächste Problem ist das e, in Matlab ist ja e^ = exp().
Ich vermute mal, da mir die Werte als Cell vorliegen erkennt er exp nicht als "Zahl" sondern als Zeichen.
Hat niemand eine Idee, wie ich die Datei einlesen kann damit Matlab das e nicht als e (Zeichen) sondern als Exponentialfunktion einliest?
_________________
'+1e+02' ist ein String, der von Matlabs
sscanf
oder
fscanf
auf Anhieb erkannt wird.
textscan
und
str2double
schaffen das dann auch. Es sind keine weiteren Verrenkungen nötig.
a=cell2mat(A(1,1)); % liest bis Zeile 248
b=cell2mat(A(1,2)); % liest bis Zeile 248
c=cell2mat(A(1,3)); % liest bis Zeile 248
d=cell2mat(A(1,4)); % liest bis Zeile 248
e=cell2mat(A(1,5)); % liest bis Zeile 248
f=cell2mat(A(1,6)); % liest bis Zeile 248
g=cell2mat(A(1,7)); % liest bis Zeile 247
h=cell2mat(A(1,8)); % liest bis Zeile 247
i=cell2mat(A(1,9)); % liest bis Zeile 247
j=cell2mat(A(1,10)); % liest bis Zeile 247
B=[a,b,c,d,e,f,g,h,i,j];
dlmwrite([strrep(filein,'.dat','') '.csv'],B,',');
[fileout]=([strrep(filein,'.dat','') '.csv']);
fclose(fin); %Wird nicht benötigt?
end
Eventuell kann es jemand bei sich Versuchen ob Matlab da alle Zeilen einliest, denn ich finde keinen Grund warum das einlesen mitten in der Datei aufhört einzulesen.
_________________
a=cell2mat(A(1,1)); % liest bis Zeile 248 % Einfacher:
a = A{1};
% usw. Oder gleich einfacher:
B = cat(2, A{:});
B=[a,b,c,d,e,f,g,h,i,j];
dlmwrite([strrep(filein,'.dat','') '.csv'],B,',');
% Ich würde mich nie darauf verlassen, dass "filein" nicht auch einen Pfad % enthält, z.B. "C:\Man.dataFolder\File.dat". Hier dann ".dat" zu ersetzen ist % tückisch! Sicherer: [fPath, fName] = fileparts(filein);
fileout = fullfile(fPath, [fName, '.csv']);
dlmwrite(fileout, B, ',');
fclose(fin); %Wird nicht benötigt?
% Doch, wird dringend benötigt! end
Es ist wichtig, geöffnete Files wieder zu schließen. Das Betriebssystem beschränkt die Zahl offener Files nämlich auf etwa 200 (Kommt auf das System an). Wenn dann
fopen
plötzlich scheitert, kann man lange nach der Ursache suchen...
Ich habe Deinen Code verwendet und das angehängte File problemlos gelesen. Ich kann nicht nachvollziehen, wieso Du meinst, es würden nur 248 Zeilen eingelesen. Die letzte 4 Zeilen sind unvollständig, deshalb enthalten die Daten NaNs. Aber es werden wie erwartet alle 2415 Zeilen importiert.
Teste es also nochmal.
Vielleicht liest Du nicht das File ein, das beabsichtigt ist? Wenn man Files ohne Pfad öffnet, sollte man beachten, dass z.B. ein Timer oder GUI-Callback den aktuellen Ordner ändern kann. Darum sollte man Files grundsätzlich und immer mit Pfad-Namen definieren.
vielen dank für deine Hilfe!
Files mit dem Pfad-Namen zu definieren macht für mich jetzt auch sinn, vielen dank für die Erklärung!
Werde ich ab jetzt immer so machen
Vielen Dank für deine Hilfe Jan!
_________________
Grüße Equi
Einstellungen und Berechtigungen
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
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.