2013-04-14 6 views
0

У меня есть CSV-файл, как этот формат:Чтение CSV файл в MATLAB

2.3 , 1.3 , 1.2 , 6.8 , classone 
1.2 , 2.6 , 1.8 , 0.7 , classtwo 

Я хочу, чтобы прочитать файл в seprate матрицу; первые 4 числовые значения в одной матрице и значение строки в другую матрицу

Я попытался TextScan функцию, но он не работает хорошо

M= textread('training.dat','%f %f %f %f %s'); 

Error using dataread 
Number of outputs must match the number of unskipped 
input fields. 
+0

Вы видели ['csvread'] (http: //www.m athworks.co.uk/help/matlab/ref/csvread.html)? Не уверен, что вы можете получить строковые данные с этим, хотя ... – wakjah

+0

@Eitan T Действительно, нет большой разницы. Единственный трюк состоял в том, чтобы учесть пробелы вокруг запятых в полевом разделителе. – 2013-04-14 21:34:37

ответ

0

Попробуйте  

[num, str, ~] = xlsread('training.dat'); 

fid = fopen('training.dat'); 
D = textscan(        ... 
     fid,     '%f%f%f%f%s', ... 
     'Delimiter',   ' , ',  ... 
     'MultipleDelimsAsOne', true   ... 
); 
fclose(fid); 

numeric_stuff = horzcat(D{1:4}); 
string_stuff = D{5}; 
+0

Благодарим за помощь, но она дает мне две матрицы: num с 0 элементами и str с массивом ячеек, и каждая ячейка содержит пять элементов без сортировки чисел и строк – Peace

+0

Alraight, это ... неожиданно. Я вернусь с чем-то другим, просто позвольте мне сначала попробовать. – 2013-04-14 20:10:39

+0

@Peace Хорошо, я попробовал что-то еще, чтобы справиться с этими своеобразными пространствами вокруг запятых ... Я правильно работаю над данными, приведенными в примере. Обратите внимание, что если вы настаиваете на том, чтобы строки были как матрица, а не как массив ячеек, вы всегда можете применить 'char()' к вашему массиву ячеек строк. – 2013-04-14 20:39:04

Смежные вопросы