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 einlesen

 

a.meyer
Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 01.06.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.06.2011, 09:09     Titel: csv-Datei einlesen
  Antworten mit Zitat      
Guten Tag zusammen!
Ich habe (so denke ich) ein ziemlich leicht zu lösendes Problem:
Ich möchte eine .csv datei einlesen und als Matrix abspeichern (was matlab ja automatisch macht...).
Das erste Problem tritt bereits auf, wenn ich den Dateinamen von Hand eingebe, dann erscheint folgende Fehlermeldung:
Code:

c_tab = csvread('HEB.csv');
??? Error using ==> dlmread at 145
Mismatch between file and format string.
Trouble reading number from file (row 1, field 1) ==> HEB;;

Error in ==> csvread at 50
    m=dlmread(filename, ',', r, c);
 

ich denke, dass das etwas damit zu tun hat, dass in der csv-Datei sowohl Zahlen als auch Strings gespeichert sind. Wenn ja, wie kann ich das beheben? Es ginge notfalls auch, dass ich die Strings, die in den ersten vier Zeilen stehen (als überschriften für die Werte) weglasse. wie müsste ich das dann machen?

Mein zweites Problem ist, dass ich die Datei dann automatische einlesen muss. Es öffnet sich ein listdlg, bei dem hier z.B. "HEB" ausgewählt und als variable bespeichert wird. Entsprechend dazu gibt es dann eine csv Datei mit genau dem Namen. Wie kann ich das machen?

Ich hoffe, das war soweit verständlich!
Vielen Dank im Voraus für die Hilfe!
Private Nachricht senden Benutzer-Profile anzeigen


Titus
Forum-Meister

Forum-Meister


Beiträge: 871
Anmeldedatum: 19.07.07
Wohnort: Aachen
Version: ---
     Beitrag Verfasst am: 20.06.2011, 10:54     Titel:
  Antworten mit Zitat      
Hallo,

zum ersten Problem: csvread ist wirklich nur was für "nur-zahlen-dateien". Ausweg: textscan verwenden.
Code:
fid = fopen('HEB.csv', 'rt');
data = textscan(fid, '%g', 'delimiter', ';', 'headerlines', 4);
fclose(fid);
 

wobie ich mal geraten habe, dass die CSV-Datei mit ";" getrennt ist, sonst entsprechend ändern.
Bzgl. Problem 2: wenn es die Variable gibt (z.B. foo), dann muss der Variablenname übergeben werden:
Code:
fid = fopen(foo, 'rt');
 

Falls das die Frage nicht beantwortet, bitte etwas genauer, was es mit dem listdlg dabei auf sich hat (uigetfile ist bekannt?)

Titus
Private Nachricht senden Benutzer-Profile anzeigen
 
a.meyer
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 01.06.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.06.2011, 13:31     Titel:
  Antworten mit Zitat      
hi
danke für die schnelle antwort!!!
hat mein problem aber leider noch nicht gelöst Sad
ich habe das jetzt mal so angepasst, aber ich bekomme wieder eine fehlermeldung:

??? Error using ==> textscan
Invalid file identifier. Use fopen to generate a valid file identifier.
der code ist folgendermaßen (vllt wird dann auch listdlg klarer...)
Code:

profiltypen = {'HD','HEA','HEAA','HEB','HEM','HL','HP','IPE','IPEa','IPEaa','IPEo','IPEr','IPEv'};
[c_typ,ok] = listdlg('Liststring',profiltypen,'SelectionMode','single','ListSize',[200 300],'Name','Stützenprofil','PromptString','Profiltyp');
c_typ_str = profiltypen{c_typ};
fid = fopen(c_typ_str,'rt');
c_tab = textscan(fid,'%g','delimiter',';','headerlines',4);
fclose(fid);
 


noch eine frage zu deinem Beitrag:
bei fopen hast du 'rt' eingefügt, was ich in der hilfe nicht finde, müsste das vllt 'r' für read heißen?
und was meinst du mit dem ';'? die csv files sind tabellenblätter aus einer exportierten excel-datei...

danke im voraus für hilfe!
Private Nachricht senden Benutzer-Profile anzeigen
 
a.meyer
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 01.06.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.06.2011, 13:38     Titel:
  Antworten mit Zitat      
achja, falls das noch hilft, da das ja scheinbar mit dem file identifier zusammenhängt, der ist bei mir als variable mit dem wert '-1' gespeichert...
Private Nachricht senden Benutzer-Profile anzeigen
 
Titus
Forum-Meister

Forum-Meister


Beiträge: 871
Anmeldedatum: 19.07.07
Wohnort: Aachen
Version: ---
     Beitrag Verfasst am: 20.06.2011, 14:27     Titel:
  Antworten mit Zitat      
Hallo,

fid=-1 heisst, dass die Datei nicht geöffnet werden konnte. Am besten dann einmal ein
Code:
[fid,message]=fopen(...);
 
ausprobieren, dann steht in message die Fehlermeldung.
Delimiter: csv steht für comma-separated-value. Nun ist in Deutschland meist das Komma für Fließkommazahlen verwendet, so dass oft ein Semilolon statt einem Komma das Trennzeichen ist. Einfach die Datei mit Notepad o.ä. aufrufen und schauen, welches es ist.
'rt': das r steht für "Read", und "t" für Text. Windows hat ja die unsägliche Eigenart, mal mit \r\n das Zeilenende zu markieren, mal nur mit \n. Das zusätzliche "t" sagt MATLAB, dass es hier sich nach dem Betriebssystem richten soll ... ist meist beim schreiben wichtiger als beim lesen einer Datei.

Ciao,
Titus
Private Nachricht senden Benutzer-Profile anzeigen
 
Titus
Forum-Meister

Forum-Meister


Beiträge: 871
Anmeldedatum: 19.07.07
Wohnort: Aachen
Version: ---
     Beitrag Verfasst am: 20.06.2011, 14:29     Titel:
  Antworten mit Zitat      
Hallo,

habe den Fehler glaube ich gefunden: es muss
Code:
fid = fopen([c_typ_str '.csv'],'rt');
 

heißen. fopen hängt nicht von sich aus die Endung .csv an ...

Titus
Private Nachricht senden Benutzer-Profile anzeigen
 
a.meyer
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 01.06.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.06.2011, 16:39     Titel:
  Antworten mit Zitat      
hi
thx für die antwort!
ok, das hab ich soweit verstanden, allerdings möchte er immer noch nicht, er sagt:
Code:

??? Error using ==> textscan
Badly formed format string.
 

ich versteh nur bahnhof...
ich lade mal die csv hoch, vllt hilft das!

danke

HEB Kopie.txt
 Beschreibung:

Download
 Dateiname:  HEB Kopie.txt
 Dateigröße:  5.24 KB
 Heruntergeladen:  1198 mal
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.