Преобразование CSV строк в матрицу - PullRequest
1 голос
/ 10 марта 2019

Я только начал использовать Octave (нет денег для Matlab: /), и я также новичок в Stack Overflow, поэтому прошу прощения за любую ошибку, которую я делаю с соглашениями.

Проблема: у меня есть csv строк, например:

Bob Marley,Kobe Bryant,Michael Jackson,Kevin Hart

Я хотел бы превратить это в матрицу из 1 столбца (она мне нужна в матрице, чтобы я мог объединить ее с данными в других матрицах).

Мой подход: я попытался сделать textread, но это дает мне массив ячеек. Я попытался преобразовать полученный массив ячеек в матрицу, используя cell2mat, но подозреваю, что не могу этого сделать, потому что мои строки имеют разную длину.

Дайте мне знать, нужна ли какая-либо другая информация.

Ответы [ 3 ]

1 голос
/ 11 марта 2019

Вы можете использовать char массивы, используя:

fid = fopen('strings.csv');
A = textscan(fid, '%s', 'delimiter', ',');
B = char(A{:})
[rows, cols] = size(B)

Вывод следующий:

B =
  Bob Marley
  Kobe Bryant
  Michael Jackson
  Kevin Hart

rows =  4

cols =  15

Как видите, количество столбцов B - это максимальная длина всех "строк" (Майкл Джексон, 15). Все остальные «строки» добавляются с пробелами.

0 голосов
/ 20 апреля 2019

Если ваши данные так просты, вы можете сделать это в одну строку. Используйте fileread, чтобы отбросить все данные, а затем strsplit, чтобы отделить элементы, и ', чтобы преобразовать их в вектор столбцов.

x = strsplit(fileread('myfile.txt'), ',')'

Если в ваших данных появятся пробелы вокруг запятых, обновите до regexp.

x = regexp(fileread('myfile.txt'), ' *, *', 'split')
0 голосов
/ 10 марта 2019

Учитывая, что вы находитесь в каталоге, где у вас есть файл "strings.csv" с содержимым, которое вы упомянули в вопросе, ваш код будет выглядеть следующим образом:

fid=fopen('strings.csv');
A=textscan(fid,'%s','delimiter',',');
A=A{1};
A=cellfun(@(x) string(x),A,'uni',0);
B=[A{:}];
...