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 und in Arrays speichern

 

Laika_1988
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 51
Anmeldedatum: 04.12.14
Wohnort: Mannheim
Version: R2010b
     Beitrag Verfasst am: 07.12.2014, 21:50     Titel: csv Datei einlesen und in Arrays speichern
  Antworten mit Zitat      
Hallo,

ich bin ein totaler Neuling was Matlab angeht und versuche meine Bachelorarbeit mit Matlab umzusetzen.

Für Details mein erster Thread: http://www.gomatlab.de/viewtopic,p,142668.html#142668

Ich möchte nun eine csv-Datei einlesen und in verschiedene Arrays speichern, um weiter damit arbeiten zu können.

Es gab in dem Thread die Idee dies über textscan zu machen.
Dabei verfolge ich folgenden Gedanken:
Den Header der Zeilen 1-10 möchte ich komplett so kopieren, wie es dort ist.
Dies soll später genauso wieder woanders eingefügt werden.

Danach die Zeilen möchte ich in verschiedene Arrays speichern. Je nach der Variable, die eine Zeile drüber steht.

Habt ihr da Tipps, wie ich das am besten angehe ? (ohne komplette Lösung zu posten bitte, will ja was lernen Smile )
Ich weiß, wie ich das mit csvread machen würde, zumindest was den Header angeht:
M = csvread(FileName,0,0,[0 0 9 6]);

Danke für alle Hilfestellungen

Liebe Grüße
Laika

transistor.txt
 Beschreibung:

Download
 Dateiname:  transistor.txt
 Dateigröße:  238.26 KB
 Heruntergeladen:  620 mal

_________________

Was nicht fliegt, stürzt auch nicht ab !!!
Private Nachricht senden Benutzer-Profile anzeigen


Laika_1988
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 51
Anmeldedatum: 04.12.14
Wohnort: Mannheim
Version: R2010b
     Beitrag Verfasst am: 08.12.2014, 13:43     Titel:
  Antworten mit Zitat      
Ich hab jetzt mal folgendes probiert:
Ich wollte die ganze Datei in ein String einlesen und dann, je nachdem was ich brauche, teilen und konvertieren.

Code:
[FileName, PathName] = uigetfile('*.csv','Bitte csv-Dateien auswählen','MultiSelect','on');
Str = fopen(FileName);
C = textscan(Str,'%s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s',1260,'delimeter','\t','EmptyValue',-Inf);
% 20 Spalten, 1260 Zeilen, getrennt durch TAB '\t', leere Zellen mit '-Inf'
% auffüllen
celldisp(C)


Allerdings bekomme ich da Fehler:

Code:

??? Error using ==> textscan
Invalid file identifier.  Use fopen to generate a valid file identifier.

Error in ==> Auswertesoftware>csvLaden_Callback at 115
C = textscan(Str,'%s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s',1260,'delimeter','\t','EmptyValue',-Inf);

Error in ==> gui_mainfcn at 96
        feval(varargin{:});

Error in ==> Auswertesoftware at 71
    gui_mainfcn(gui_State, varargin{:});

Error in ==> @(hObject,eventdata)Auswertesoftware('csvLaden_Callback',hObject,eventdata,guidata(hObject))

 
??? Error while evaluating uicontrol Callback
 

_________________

Was nicht fliegt, stürzt auch nicht ab !!!
Private Nachricht senden Benutzer-Profile anzeigen
 
Laika_1988
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 51
Anmeldedatum: 04.12.14
Wohnort: Mannheim
Version: R2010b
     Beitrag Verfasst am: 08.12.2014, 15:34     Titel:
  Antworten mit Zitat      
Okay, ich habs:

Code:
[FileName, PathName] = uigetfile('*.csv','Bitte csv-Dateien auswählen');
fid = fopen(fullfile(PathName,FileName),'rt');
C = textscan(fid,'%s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s',1260,'EmptyValue',-Inf);
% 20 Spalten, 1260 Zeilen, getrennt durch TAB '\t', leere Zellen mit '-Inf'
% auffüllen
celldisp(C)


Ich habe es natürlich erst mit nur einer Datei probiert.
Der Fehler war, dass der Dateiname erst zusammen gesetzt werden muss.
Ebenfalls hab ich das File als Text eingelesen: 'rt'
_________________

Was nicht fliegt, stürzt auch nicht ab !!!
Private Nachricht senden Benutzer-Profile anzeigen
 
Laika_1988
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 51
Anmeldedatum: 04.12.14
Wohnort: Mannheim
Version: R2010b
     Beitrag Verfasst am: 08.12.2014, 19:50     Titel:
  Antworten mit Zitat      
Mmmh, es klappt doch nicht so ganz.

Ich weiß nicht, ob ich wirklich mit textscan arbeiten kann.

Meine einzelnen Zellen in der entstandenen Matrix sind verschoben.
Nach langem probieren, weiß ich auch warum.
Eine Zelle z.B. enthält zwei Wörter, die natürlich von textscan in zwei Arrays gespeichert werden, was die ganze Matrix verschiebt.

Wisst ihr einen Rat es weiterhin mit textscan machen zu können ?
Es wurde mir empfohlen textscan zu nehmen, sonst muss ich es mit readtable machen, ich denke da habe ich das Problem nicht.
_________________

Was nicht fliegt, stürzt auch nicht ab !!!
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 08.12.2014, 22:04     Titel:
  Antworten mit Zitat      
Probier es doch mal hiermit:

Code:

[FileName, PathName] = uigetfile('*.txt','Bitte csv-Dateien auswählen');
fid = fopen(fullfile(PathName,FileName),'rt');
C = textscan(fid,'%s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s',1260,'Delimiter','\t','EmptyValue',-Inf);
% 20 Spalten, 1260 Zeilen, getrennt durch TAB '\t', leere Zellen mit '-Inf'
% auffüllen
celldisp(C)
 


Die Option heißt übrigens "Delimiter" nicht "Delimeter". Wie soll man eigentlich eine Transistor.txt auswählen, wenn nur *.csv zugelassen wird?
Private Nachricht senden Benutzer-Profile anzeigen
 
Laika_1988
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 51
Anmeldedatum: 04.12.14
Wohnort: Mannheim
Version: R2010b
     Beitrag Verfasst am: 08.12.2014, 22:23     Titel:
  Antworten mit Zitat      
Hallo Dsp,

Es soll ja eine csv Datei eingelesen werden,deswegen dürfen nur solche Dateien ausgewählt werden.

Das rt hab ich schon geändert zu r.
Das delimiter hab ich schon gemerkt und korrigiert.
_________________

Was nicht fliegt, stürzt auch nicht ab !!!
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 08.12.2014, 22:31     Titel:
  Antworten mit Zitat      
Aber du hängst hier als Beispiel eine Transistor.txt Datei an und keine csv!

Ich kann nur das testen was du hier vorlegst. Mit der Transistor.txt und dem von mir geposteten Code scheint für mich das Ergebnis auf einen groben Blick richtig.
Private Nachricht senden Benutzer-Profile anzeigen
 
Laika_1988
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 51
Anmeldedatum: 04.12.14
Wohnort: Mannheim
Version: R2010b
     Beitrag Verfasst am: 08.12.2014, 22:46     Titel:
  Antworten mit Zitat      
Hallo,

Ja, das ist richtig, weil das Forum meine csv Datei nicht akzeptiert hat wegen ungültigem Format. Ich durfte keine csv hochladen, deswegen hab ich ein txt draus gemacht
_________________

Was nicht fliegt, stürzt auch nicht ab !!!
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 08.12.2014, 22:53     Titel:
  Antworten mit Zitat      
Dann packt man die Datei eben vorher Wink

Stimmt denn das Ergebnis bei der Transistor.txt Datei? Wenn nicht, bitte genau beschreiben was falsch ist.
Private Nachricht senden Benutzer-Profile anzeigen
 
Laika_1988
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 51
Anmeldedatum: 04.12.14
Wohnort: Mannheim
Version: R2010b
     Beitrag Verfasst am: 09.12.2014, 07:54     Titel:
  Antworten mit Zitat      
Hallo,

oh, okay, ich wusste nicht, dass das geht. Danke für den Tipp.

Ich glaube, es bringt mir nichts, wenn es mit der txt.Datei funktioniert.
Es steht in der txtx Datei genauso getrennt drin, wie in der csv-Datei.
Ich habe ja als Delimiter den TAB und in einer Zelle stehen zwei Wörter, welche nicht zusammengeschrieben sind.
Textscan schiebt diese in zwei Arrays, obwohl die ein Array sein sollten.
Dies verschiebt die komplette Matrix, egal ob txt oder csv Sad
_________________

Was nicht fliegt, stürzt auch nicht ab !!!
Private Nachricht senden Benutzer-Profile anzeigen
 
Laika_1988
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 51
Anmeldedatum: 04.12.14
Wohnort: Mannheim
Version: R2010b
     Beitrag Verfasst am: 09.12.2014, 08:37     Titel:
  Antworten mit Zitat      
Okay, also ich habe meinen Fehler gefunden.
Es lag an dem blöden Delimiter.

Jetzt funktioniert es, allerdings kann ich keine einzelnen Zeilen selektieren.

Ich möchte z.B.

Code:
V_DrainSource = C(1:5,3);
celldisp(V_DrainSource);


Da gibt er mir den Fehler aus: ??? Index exceeds matrix dimensions.

Was mache ich falsch, denn wenn ich die ganze Spalte selektieren will, funktioniert es ohne Probleme:

Code:
V_DrainSource = C(:,3);
celldisp(V_DrainSource);

_________________

Was nicht fliegt, stürzt auch nicht ab !!!
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.