我有包含测量数据的文本文件,标题并不那么重要,所以我用它来删除前 25 行
% Skip the first 25 lines
for i=1:25
fgetl(inputfile);
end
然后我使用分隔符来获取数据
delimiter = '';
values = textscan(inputfile, '%s', 'delimiter', delimiter);
我正在尝试转换由 1000 个字符组成的单元格,如下所示。 这是我得到的
'2014_11_03_17-19-49 000 430114 516672 960.91 26.2'
'2014_11_03_17-19-49 001 430112 516656 960.91 26.2'
'2014_11_03_17-19-49 002 430112 516656 960.91 26.2'
'2014_11_03_17-19-49 003 430112 516656 960.91 26.2'
我正在尝试转换由 1000 个字符组成的单元格,就像之前我只关心(960.91 和 26.2)值一样。
我尝试将其转换为矩阵,但我得到了
this error Cannot support cell arrays containing cell arrays or objects.
知道如何将这些值放入矩阵中以绘制它们。
最佳答案
方法#1
您可以使用漂亮的 importdata
这里 -
lines_skip = 25;
values = importdata(inputfile,' ',lines_skip) %// using the delimiter ' ' here
values
将是一个保存来自 inputfile
的数据的结构。
因此,第四列
将是values.data(:,4)
,而values.data(:,5)
将是第五个
如下所示 -
>> values.data(:,4)
ans =
960.9100
960.9100
960.9100
960.9100
>> values.data(:,5)
ans =
26.2000
26.2000
26.2000
26.2000
方法#2
如果您已经拥有问题中列出的元胞数组,则无需担心再次读取输入文件。所以,你有这样的东西 -
incell = {
'2014_11_03_17-19-49 000 430114 516672 960.91 26.2'
'2014_11_03_17-19-49 001 430112 516656 960.91 26.2'
'2014_11_03_17-19-49 002 430112 516656 960.91 26.2'
'2014_11_03_17-19-49 003 430112 516656 960.91 26.2'}
接下来,您可以将 cellfun
与 regexp
结合使用,使用分隔符 ' '
-
cellarr = cellfun(@(x) regexp(x,' ','Split'),incell,'un',0)
values = vertcat(cellarr{:})
这会让你 -
values =
'2014_11_03_17-19-49' '000' '430114' '516672' '960.91' '26.2'
'2014_11_03_17-19-49' '001' '430112' '516656' '960.91' '26.2'
'2014_11_03_17-19-49' '002' '430112' '516656' '960.91' '26.2'
'2014_11_03_17-19-49' '003' '430112' '516656' '960.91' '26.2'
也就是说,values
中的第五列和第六列将是您在将 str2double
包裹起来后想要获得的数据:str2double(values(:, 5))
和 str2double(values(:,6))
。
关于matlab - 将单元格转换为包含文本的矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26741790/