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

bestimmten Bereich in CSV Datei einlesen

 

björn_k82

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.10.2013, 15:02     Titel: bestimmten Bereich in CSV Datei einlesen
  Antworten mit Zitat      
Hallo,
versuche gerade die CSV Datei (siehe screenshot.jpg) einzulesen.
ich benötige jedoch nur den Bereich aus (Zeile 25 Spalte 3) bis (Zeile 30 Spalte 7). Die Spalten sind, wie zu sehen, durch Komma getrennt.

habe es zuerst versucht mit:

Code:

m=dlmread('Messung.csv',',','C25..G30')
 

Dies gab folgende Fehlermeldung
??? Error using ==> dlmread at 145
Mismatch between file and format string.
Trouble reading number from file (row 1, field 13) ==> LLLL

Habe es auch mit kleinerem Bereichen versucht, zB: 'C26..D27', funktioniert auch nicht.

als nächstes habe ich es probiert mit:

Code:

fid=fopen('Messung.csv')
C=textscan(fid,'%s %s %f32 %f32 %f32 %f32 %f32','Delimiter',',');
fclose(fid)
 


der Textscan wertet mir aber seltsamerweise nur die ersten 6 Zeilen aus, ich bräuchte aber 30 Zeilen damit ich damit was anfagen kann.

>> C{1}

ans =

'Vendor'
'Model'
'Version'
'Sampling'
'Total data points'
'Start time'

Am liebsten wäre es mir wenn es mit dem dlmread funktionieren würde, hab aber keine Ahnung warum das so nicht klappt.

für Hilfe wäre ich dankbar

gruß

screenshot.jpg
 Beschreibung:

Download
 Dateiname:  screenshot.jpg
 Dateigröße:  215.79 KB
 Heruntergeladen:  481 mal


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 04.10.2013, 16:07     Titel:
  Antworten mit Zitat      
Hallo,

bei dlmread steht in der Doku:
Zitat:
Read ASCII-delimited file of numeric data into matrix

Du hast aber eben keine rein-numerischen Daten.

Mit textscan bist du auf dem richtigen Weg. Du kannst ja mit 'Headerlines' die Anzahl der zu überspringenden Zeilen angeben. Wenn du weitere Hilfe brauchst, bitte die Datei anhängen, damit man selbst damit experimentieren kann.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
björn_k82

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.10.2013, 16:56     Titel:
  Antworten mit Zitat      
Danke für die schnelle Antwort.

csv konnte ich nicht anhängen. habe es jetzt im ".txt" Format angehangen.

Mit "headerLines" war schon mal ein guter Hinweis.

Code:

fid=fopen('Messung.csv')
C=textscan(fid,'%f32 %f32 %f32 %f32 %f32 %f32 %f32 %f32 %f32 %f32 %f32 %f32 %f32','headerLines',24,'Delimiter',',');
fclose(fid)
 

Allerdings ist die Ausgabe für mich nicht ganz nachvollziehbar:

>> C{1}

ans =

1

>> C{2}

ans =

2013

>> C{3}

ans =

-10

und ab C{6}

>> C{6}

ans =

Empty matrix: 0-by-1

------------------------------------------------------------
und ich will nur die Werte von +15.36 bis +19.08
irgendwie müsste ich dann noch die ersten 2 Spalten ignorieren, also alles was vor den ersten 2 kommas steht.

wie kann ich da weite vorgehen?

Messung.txt
 Beschreibung:

Download
 Dateiname:  Messung.txt
 Dateigröße:  1.58 KB
 Heruntergeladen:  326 mal
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 04.10.2013, 17:11     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Allerdings ist die Ausgabe für mich nicht ganz nachvollziehbar:

Für mich schon. textscan fängt da zu lesen an, wo du sagst. Sobald etwas nicht mehr als Zahl interpretierbar ist, und das ist bei einem Doppelpunkt der Fall, wird aufgehört.

Für das Einlesen von Strings würde ich %s verwenden. Wenn etwas nicht gebraucht wird, muss es trotzdem eingelesen werden, kann aber mit * übersprungen werden.

Code:
fid=fopen('Messung.txt');
C=textscan(fid,'%*f %*s %f32 %f32 %f32 %f32 %f32 %f32 %f32 %f32 %f32 %f32 %*s','headerLines',24,'Delimiter',',');
fclose(fid);
C = cell2mat(C);


Bei der Verwendung von %f32 (Single)würde ich aufpassen - wenn mit den Daten noch längere Berechnungen durchgeführt werden, wird das gerne zu ungenau. Ich würde generell %f (Double) verwenden.

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



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.10.2013, 22:00     Titel:
  Antworten mit Zitat      
Vielen Dank Harald,

ich komme schritt für schritt weiter.

Code:

C=textscan(fid,'%*f %*s %f %f %f %f %f %*f %*f %*f %*f %*f %*s','headerLines',24,'Delimiter',',');
 


ich habe es jetzt so verstanden, dass ich durch den * in der zeile die 1, 2,8,9,10,11,12,13 te Zeile überspringe. ist das Richtig?

Dann habe ich mir gedacht, dann müsste bei C{1} folgendes rauskommen:
C{1}=
15.36
15.36
15.12
14.88
15.24
15.36

und für C{2} usw.... die jeweils nächste Spalte

als Ergebnis erhalte ich aber:

>> C{1}
ans =

NaN
NaN
3.0000
NaN
-730.6800
-730.6800
-730.5600

daraus schließe ich, dass ich doch irgendwas falsch verstanden habe!?!

Für Aufklärung wäre ich wieder dankbar

Smile
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.10.2013, 22:02     Titel:
  Antworten mit Zitat      
sorry,
"ich habe es jetzt so verstanden, dass ich durch den * in der zeile die 1, 2,8,9,10,11,12,13 te Zeile überspringe. ist das Richtig? "

ich meine natürlich die 1,2,8,9..... Spalte überspringen
 
Harald
Forum-Meister

Forum-Meister


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

Zitat:
Dann habe ich mir gedacht, dann müsste bei C{1} folgendes rauskommen: [...]

wenn ich meinen Code ausführe oder den Code mit deiner Anpassung des Formats bekomme ich genau das.
Arbeitest du vielleicht gerade mit einer anderen Datei?

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



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.10.2013, 22:51     Titel:
  Antworten mit Zitat      
das ist komisch,
ich arbeite mit der selben .csv datei.
habs aber auch mit der .txt probiert und das selbe ergebnis bekommen.

allerdings bin ich jetzt zu hause und habe nur octave, probiere es morgen nochmal bei matlab um auszuschließen das es daran liegt.
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.10.2013, 13:41     Titel:
  Antworten mit Zitat      
so.....update

bei Matlab gibts die Ergebnisse wie Erwartet Smile

der Hinweis mit den headerLines und dem * in %*f zum überspringen der Spalten waren entscheidend für die Lösung meines Problems.

C=cell2mat(C); konnte ich im anschluss direkt gebrauchen um aus dem "Cell-Array" eine Matrix zu basteln.

Vielen Dank Harald !!!
 
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.