Как утверждают другие, было бы лучше использовать выделенную библиотеку синтаксического анализатора CSV ... Тем не менее, вот одно из возможных решений:
file.csv
12,23,aaaaa,3,[1,2,3,4,5],5
222,33,b,4,[2],6
32,43,c,5,[3,4],7
42,534,ddd,6,[4,5,0],8
52,63,e,7,[5,6],9
MATLAB
%# cell array to hold the data
C = cell(0,6);
%# read file line-by-line
fid = fopen('file.csv','rt');
while ~feof(fid)
tline = fgetl(fid);
%# get [...] tokens and their locations (assuming there is one per line)
[tok tokExt] = regexp(tline, '\[(.*)\]', 'tokens', 'tokenExtents', 'once');
%# replace commas with space in tokens, and place back into line
tline(tokExt(1):tokExt(2)) = strrep(tok{1},',',' ');
%# split line by commas and store the parts read
C(end+1,:) = textscan(tline, '%f %f %s %f %s %f', 'Delimiter',',');
end
fclose(fid);
%# reduce nested level of cell array
C(:,3) = vertcat(C{:,3});
C(:,5) = vertcat(C{:,5});
Результат чтения файла примера выше:
>> C
C =
[ 12] [ 23] 'aaaaa' [3] '[1 2 3 4 5]' [5]
[222] [ 33] 'b' [4] '[2]' [6]
[ 32] [ 43] 'c' [5] '[3 4]' [7]
[ 42] [534] 'ddd' [6] '[4 5 0]' [8]
[ 52] [ 63] 'e' [7] '[5 6]' [9]
Очевидно, это массив ячеек, напечатанный в командной строке (MATLAB использует []
для обозначения записей матрицы, поэтому не путайте их с скобками, считанными из файла) ..
Если вы хотите получить числовые значения пятого столбца, вы можете использовать STR2NUM:
C(:,5) = cellfun(@str2num, C(:,5), 'UniformOutput',false)