Also ich habe keine Probleme gehabt, damit das File zu lesen und sinnvolle Werte zu importieren. Bitte teste dies nochmal und poste den Code und einen weiteren (kleinen) Ausschnitt aus Deinem Daten-File.
Nebenbei ist es eine gute Idee, im Forum niemals "funktioniert nicht" zu schreiben, ohne eine genaue Erklärung, was nicht funktioniert und was stattdessen passiert. Es ist viel effizienter Probleme zu lösen, also sie zu erraten.
hey
also ich glaube ich weiß woran es liegt... Die Daten sind schreibgeschützt und deswegen werde ich, zumindestens denk ich das, die Daten nicht auslesen. Ist meine Vermutung richtig? Habe dann auch mal per Hand die Daten in eine andere Datei kopiert und dort hat es dann funktioniert.
"Schreibschutz" bedeutet, das man nicht schreiben kann. Man kann die Daten aber natürlich auslesen. Falls Du "fopen(FileName, 'w')" verwendest, bekommst Du -1 zurück, weil Matlab das file ja nicht zum Schreiben öffnen darf. Mit "fopen(Filename)" oder "fopen(FileName, 'r')" sollte es aber problemlos funktionieren.
Achso was mir auch noch aufgefallen ist, dass wenn ich die Daten alle mit textscan(%s %s usw) auslese, erhalte ich in der ersten Zelle diesen Ausdruck: ÿþ4 alle übrigen sind leer. Kann das behilflich sein oder ist das ein Zufallsprodukt?!?! Hab keine Ahnung mehr
Ich rate hier mal ein wenig ins Blaue aber hast du dir bei fopen schon mal den Parameter "encoding" angesehen. Eventuell verwendest du ja nen andren Zeichensatz oder so und damit kommt er nicht klar.
nein das habe ich mir noch nicht angeschaut bzw mit gearbeitet. Habe es eben mal probiert... Wenn ich das richtig verstehe, muss ich nur den gewünschten zeichensatz auswählen und hinter meinem 'r' platzieren...
zum Beispiel:
2. Wenn Du sie mit dem Editor von Matlab öffnest, sieht sie so aus wie oben gezeigt, oder? Dann ist es ein ASCII-Datei und Du musst Dir über die Codierung keine Gedanken machen.
3. Du liest sie mit diesem, genau diesem und nicht mit irgendeinem anderen TEXTSCAN-Befehl ein:
Code:
data = textscan(fid, '%s%*s%f%f%f%*s%*s%*s','delimiter',',');
Dann enthält "data" die einzelnen Spalten wie gewünscht.
Wenn es bis hierhin nicht funktioniert, hast Du bisher nicht das erklärt, was Du eigentlich machst.
Zitat:
Achso was mir auch noch aufgefallen ist, dass wenn ich die Daten alle mit textscan(%s %s usw) auslese, ...
Das "usw" ist hier tückisch: Da es auf die Details ankommt, kann man diese nicht mal eben weglassen.
Zudem sehe ich hier Leerzeichen zwischen der "%s". Ich würde aber nicht mal eben Leerzeichen in einen Format-String einfügen, nur weil es zugegebenermassen besser aussieht.
Zitat:
...erhalte ich in der ersten Zelle diesen Ausdruck: ÿþ4 alle übrigen sind leer. Kann das behilflich sein oder ist das ein Zufallsprodukt?
Matlab gibt keine Zufalls-Produkte aus, solange Du kein RAND verwendest. Wenn Du "ÿþ4" als Ausgabe erhälst, sieht das so aus, als würdest Du eine DOUBLE oder SINGLE Zahl, welche binäre geschrieben wurde, als String importieren. Es ist etwas ganz anderes, ob Du die 8 Byte, die der Rechner intern für DOUBLEs verwendet, als Bitfolge in ein File schreibst, oder die entsprechenden Buchstaben '0' bis '9'. Deshalb wäre es sehr praktisch, wenn Du den Inhalt des Files und das Format hier posten könntest, statt es RAR-verdongelt in eine Datenschutz-geblockte Dropbox zu legen.
Meiner Ansicht nach ist das Problem sehr einfach zu lösen, sobald klar ist, was Du genau mit welchen Daten machst. Dass "Deine TRY CATCH Anweisung bei den Zeichensätzen greift" sagt mir gar nichts. Besser wäre es also den Code und die Fehlermeldung zu posten.
Ja die Datei heißt "Report01.csv" und enthält genau die oben aufgezeigten Daten.
Mein Code ist folgender
Code:
cd('120620') for i=1:AnzahlMessungen
if i<10 %solange die Laufvariable "i" kleiner ist als 10 springe in den Ordnernamen
cd(strcat('SIG200000',num2str(i),'.D'))% hier wird der Ordnername zusammengefügt z.Bsp. für i=1 --> SIG2000001.D elseif i>=10 %Wenn i größer oder gleich 10 ist dann springe in den folgenden Ordnernamen
cd(strcat('SIG20000',num2str(i),'.D')) %siehe oben
end end try %Versuche die Datei §report01.csv" zu öffnen
fid=fopen('report01.csv','r','l','windows-1257');
% data1=fread(fid, inf,'char=>char', 1,'l')'%wenn datei vorhanden dann öffne diese
data1 = textscan(fid,'%f%*s%f%f%f%*s%*s%*s','delimiter',',','EmptyValue', NaN,'treatAsEmpty', {'"-"'},'MultipleDelimsAsOne', 1) %lese die Werte aus der Datei
%M(:,:,i)=cell2mat(data1); % Wandle die Werte in eine Matrix fclose(fid); %schließe die Datei
catch %Sollte ein Fehler auftreten beim öffnen der Datei, auslesen oder beim Wandeln dann
disp('geht nicht') %schreibe den Text "geht nicht"
end
cd('..') %Wieder aus dem oben geöffneten Ordner zurückspringen
end cd('..')
%Größe der Matrix bestimmen falls in den Unterordnern keine Datei "report01.csv" vorhanden ist, ist AnzahlMessungen ungleich der größe der Matrix
Dort liest er mir jede Zeile in eine Vektor als Char aus. Ok aber ist meiner Meinung nach nciht die schönste Variante, da man dort die Daten danach noch auseinander nehmen muss.
Habe auch in meinem Code probiert das 'windows-1257' mit einzufügen doch auch mit diesem Ausdruck erhalte ich keine Daten.
Also woran liegt das Problem mit dem "textscan"???
Ach ja und ich habe auch den Code mit "fread" ausprobiert. Dieser funktioniert!!! Wenn ich dort das "windows-1257" weglasse erhalte ich bei der ersten Zeile folgenden Ausdruck:
Somit denke ich es hat was mit der Kodierung zu tun?!!? Und textscan hat damit Probleme?!?!
Danke für eure Hilfe!!!
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.