2016-06-02 21 views
0

Mit einer CSV-Datei versuche ich, eine Reihe von Zeilen aus einer CSV-Datei zu lesen und dann jede Zeile in eine Matrix zu schreiben.Schreiben von Zeilen/Spalten von .csv in Matrix mit Matlab

Ein Fehler tritt auf, dass heißt es:

'Index exceeds matrix dimensions.' 
Error in Id_Vg (line 17) 
     meas(j,:) = csvread(filename,0,0,[row 2 row+j 5]); 

Ist das Problem, dass diese Zeile Spalten 2 bis 10 in ein Element zu schreiben versucht, von ‚mess‘?

Ich dachte, dass die Vorbelegung von "meas" mit Nullen jede einzelne CSV-Spalte und Zeile in 'meas' schreiben könnte.

function [ output_args ] = Id_Vg(filename, row,... 
          nopoints, noskip); 

%directory= address of the .csv files "C:\....." 
%filename = .csv name "1us.csv" 
%row  = starting row to ignore all text before values, "120" 
%nopoints = number of measurement points at each condition "[1e1 1e3 1e1 1e3 1e2]" 
%noskip = determines whether to skip condition "[0 1 0 1 0]" 0=skip. 

rowstop = row+sum(nopoints); 
M = csvread(filename,row,1,[row 2 rowstop 5]); 

meas = zeros(sum(nopoints),4); 

    for i = 1:length(nopoints) 
     if noskip(i) == 0 
      for j=1:sum(nopoints) 
     meas(j,:) = csvread(filename,0,0,[row 2 row+j 5]); 
      end 
     end 
    end 

Edit: Changed 'mess (j)' auf 'mess (j, :) und die nützlichen CSV-Spalten verändert, so dass keine leeren Spalten 'mess' geschrieben werden.

Fehler immer noch auftritt:

Subscripted assignment dimension mismatch. 

Ich verstehe dies in der Regel auf Grund, in diesem Fall zu viele CSV-Spalten zu einer Matrix zu schreiben, die nicht genügend Spalten enthält. Dies sollte nicht der Fall sein, da selbst das Schreiben einer höheren Anzahl von Nullen zum Messen den gleichen Fehler erzeugt.

+2

Wenn csvread 10 Werte in jeder Zeile liest, dann sollten Sie schreiben: 'meas (j, :) = ...'. – obchardon

+0

Derselbe Fehler tritt auf, aber danke. Dies sollte helfen, die .csv-Spalten in 'meas' zu schreiben. Möglicherweise ist es ein anderes Thema als das, was ich im ursprünglichen Kommentar erwähnt habe. – Azaxa

Antwort

1

Sie haben recht: Das Problem ist, dass diese Zeile versucht, die Spalten 2 bis 10 in ein Element von 'meas' zu schreiben.

Sie schreiben sollte meas(j,:) = ... statt meas(j) = ...

mess (j, ist :) entspricht mess (1,1: 10).

Wenn Sie meas(j) = [1 2] schreiben, versuchen Sie, 2 Elemente in ein Element von meas zu schreiben, was unmöglich ist.

Und Vorsicht mit diesem Code sollte Ihr csvread immer 10 Werte zurückgeben!

+0

Leider scheint es eine Dimensionsabweichung zu geben, selbst wenn Sie Ihre letzte Aussage berücksichtigen. Der Beitrag wurde mit Ihren Empfehlungen bearbeitet, danke. – Azaxa

+0

Obchardon, gibt es noch mehr, was Sie vorschlagen können? – Azaxa

+1

Ich denke auch, dass Ihr Parameter in csvread falsch ist: weil, wenn Sie schreiben: 'csvread (Dateiname, 0,0, [Zeile 2 Zeile + j 5]);' es bedeutet, dass Sie etwas Wert auf mehr als eine Zeile erhalten! Sollte es nicht 'csvread sein (Dateiname, 0,0, [' j 2 j 5]); '? Du liest also 4 Werte von nur EINER Reihe! Oder 'csvread (Dateiname, 0,0, [Zeile + j 2 Zeile + j 5]);' – obchardon