将字符串的csv转换为矩阵

时间:2019-03-10 04:53:51

标签: matlab matrix octave cell-array

我刚刚开始使用Octave(对于Matlab来说是没有钱:/),我也是Stack Overflow的新手,所以请宽恕我在约定中遇到的任何错误。

问题:我的csv字符串如下:

Bob Marley,Kobe Bryant,Michael Jackson,Kevin Hart

我想将其制成1列矩阵(我需要一个矩阵,以便可以将其与其他矩阵中的数据组合在一起)。

我的方法:我尝试做textread,但这给了我一个单元格数组。我尝试使用cell2mat将结果单元格数组转换为矩阵,但是我怀疑我不能这样做,因为我的字符串长度不一。

让我知道是否需要其他信息。

3 个答案:

答案 0 :(得分:1)

您可以通过以下方式使用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的列数是所有“字符串”的最大长度(Michael Jackson,15)。所有其他“字符串”都将附加空格。

答案 1 :(得分:0)

考虑到您位于文件“ strings.csv”所在的目录中,其中包含您在问题中提到的内容,因此您的代码如下所示:

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

答案 2 :(得分:0)

如果您的数据是如此简单,则可以单线进行。使用fileread提取所有数据,然后使用strsplit分离元素,然后使用'转置将其转换为列向量。

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

如果您的数据中逗号前后都留有空格,请升级到regexp

x = regexp(fileread('myfile.txt'), ' *, *', 'split')