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 mit textscan auslesen

 

carki
Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 08.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.06.2012, 15:25     Titel: csv mit textscan auslesen
  Antworten mit Zitat      
HAllo

ich versuche gerade eine Datei die wie angehängt aufgebaut ist.

Öffne diese mit fopen und versuche dann die daten wie folgt auszulesen
Code:

data1 = textscan(fid,'%s "%*s" %f %f %f "%*s" "%*s" "%*s"','delimiter',',');
 


allerdings sind die Cells die ich erhalte alle leer?!?! woran liegt das??? ich versteh es nicht mehr hat sonst immer so funktioniert....

danke im voraus

gruß
Carki

EDITED, Jan Statt des RAR-gepackten CSV Files hier der Text direkt:
Code:
4.5893611907959,"HH    ",1378.97192382813,0.00178582000602845,2.4625956493238," ","","Kohlenstoffdioxid"
6.18281555175781,"BB    ",3.3014931678772,0.469751252890614,1.55088055202012," ","","Wasserstoff"
7.05432844161988,"VB S  ",30732.04296875,0.00242041222349972,74.3842124546811," ","","Stickstoff"
7.62672996520996,"BV X  ",4.63053798675537,0.00302852335160824,0.0140236924233976," ","","Methan"
8.47848987579346,"BB    ",81.5314559936524,0.0020377381239373,0.166139756178382," ","","Kohlenstoffmonoxid"


REPORT01.rar
 Beschreibung:

Download
 Dateiname:  REPORT01.rar
 Dateigröße:  492 Bytes
 Heruntergeladen:  410 mal
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: 01.07.2012, 10:07     Titel: Re: csv mit textscan auslesen
  Antworten mit Zitat      
Hallo carki,

Ich finde die Syntax von TEXTSCAN dermassen verwurstelt, dass ich es außer für sehr einfache Fälle nicht benutze. Schade eigentlich.

Die Anführungszeichen scheinen das Lesen zu behindern. Also kannst Du sie mit-importieren, zumal sie sowieso ignoriert werden:
Code:
data1 = textscan(fid, '%s%*s%f%f%f%*s%*s%*s','delimiter',',');

Das scheitert dann, wenn die in Anführungszeichen eingeschlossenen Strings Kommas enthalten.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
carki
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 08.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.07.2012, 11:10     Titel:
  Antworten mit Zitat      
Auch ohne Anführungszeichen funktioniert es nicht :-/

Bin ratlos....

Habt ihr noch andere Möglichkeiten diese Datein auszulesen???
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: 01.07.2012, 20:12     Titel:
  Antworten mit Zitat      
Hallo carki,

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.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
carki
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 08.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.07.2012, 18:26     Titel:
  Antworten mit Zitat      
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.
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: 02.07.2012, 20:33     Titel:
  Antworten mit Zitat      
Hallo carki,

"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.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
carki
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 08.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.07.2012, 20:46     Titel:
  Antworten mit Zitat      
Hmm ich verstehe dann aber echt wieso es nciht funktioniert....

wie gesagt mehr daten als oben gezeigt sind nicht in der Datei und wenn ich diese in eine andere Datei speichere, funktioniert es.... Question Question Question Question
Private Nachricht senden Benutzer-Profile anzeigen
 
carki
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 08.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.07.2012, 12:22     Titel:
  Antworten mit Zitat      
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 Crying or Very sad
Private Nachricht senden Benutzer-Profile anzeigen
 
Goofy9020
Forum-Century

Forum-Century


Beiträge: 164
Anmeldedatum: 10.08.11
Wohnort: ---
Version: 2009a, 2010b
     Beitrag Verfasst am: 03.07.2012, 12:43     Titel:
  Antworten mit Zitat      
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.
Private Nachricht senden Benutzer-Profile anzeigen
 
carki
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 08.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.07.2012, 13:45     Titel:
  Antworten mit Zitat      
Hey

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:
Code:

fopen(Dateiname,'r+','US-ASCII');
 


Allerdings greift bei dem in der Matlab Hilfe aufgeführten Zeichensätzen immer meine Try..Catch anweisung. und das programm öffnet keine Datei.

Wie bekomm ich heraus welche Kodierung meine Datein haben??? MAche das für eine Freundin die die Datein auch nur von ihre Betreuerin bekommt.

Gruß
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: 03.07.2012, 14:53     Titel:
  Antworten mit Zitat      
Hallo carki,

Nochmal Schritt für Schritt:

1. Du hast eine Datei, mit folgendem Inhalt:
Code:
4.5893611907959,"HH    ",1378.97192382813,0.00178582000602845,2.4625956493238," ","","Kohlenstoffdioxid"
6.18281555175781,"BB    ",3.3014931678772,0.469751252890614,1.55088055202012," ","","Wasserstoff"
7.05432844161988,"VB S  ",30732.04296875,0.00242041222349972,74.3842124546811," ","","Stickstoff"
7.62672996520996,"BV X  ",4.63053798675537,0.00302852335160824,0.0140236924233976," ","","Methan"
8.47848987579346,"BB    ",81.5314559936524,0.0020377381239373,0.166139756178382," ","","Kohlenstoffmonoxid"


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.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
carki
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 08.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.07.2012, 15:08     Titel:
  Antworten mit Zitat      
Ok Ok

so alles nochmal schritt für schritt.

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
else if 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 verwende ich ja wie
Code:

data1 = textscan(fid,'%f%*s%f%f%f%*s%*s%*s','delimiter',',','EmptyValue', NaN,'treatAsEmpty', {'"-"'},'MultipleDelimsAsOne', 1)
 


Mit diesem Ausdruck sind die einzelnen Inhalte von data1 immer leer!

Mit dem Ausdruck
Code:

data1 = textscan(fid,'%s%*s%f%f%f%*s%*s%*s','delimiter',',','EmptyValue', NaN,'treatAsEmpty', {'"-"'},'MultipleDelimsAsOne', 1)
 


bekomm ich in der ersten Spalte dieses "ÿþ4"!

Habe jetzt auch mal ein anderen Code erhalten der funktioniert dies wäre der wie folgt
Code:

fid = fopen(dateiname,'r','l','windows-1257');
           
                data1 = fread(fid, inf,'char=>char', 1,'l')';
 


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:
Code:

ÿ4.5893611907959,"HH    ",1378.97192382813,0.00178582000602845,2.4625956493238," ","","Kohlenstoffdioxid"

Mit dem "windows-1257" ist das "ÿ" weg.

Somit denke ich es hat was mit der Kodierung zu tun?!!? Und textscan hat damit Probleme?!?!

Danke für eure Hilfe!!!
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.