我有包含测量数据的文本文件,标题不重要所以我用它来删除前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)值一样。
我尝试将其转换为矩阵,但我得到了
此错误不支持包含单元格数组或对象的单元格数组。
知道如何将这些值放入矩阵中绘制它们。
答案 0 :(得分:1)
使用textscan
'HeaderLines'
option的其他格式说明符直接跳过标题:
>> fid = fopen('testtext.txt','r','HeaderLines',25)
>> C = textscan(fid,'%s %d %d %d %f %f')
C =
{4x1 cell} [4x1 int32] [4x1 int32] [4x1 int32] [4x1 double] [4x1 double]
>> fclose(fid);
>> C{5}
960.9100
960.9100
960.9100
960.9100
通过连接制作一个矩阵,如果你想这样:
>> M =[C{5} C{6}]
M =
960.9100 26.2000
960.9100 26.2000
960.9100 26.2000
960.9100 26.2000
您甚至可以指定忽略除所需输出之外的所有输出:
C = textscan(fid,'%*s %*d %*d %*d %f %*f')
C =
[4x1 double]
如果丢失了手柄,请不要忘记fclose(fid)
或fclose all
。
答案 1 :(得分:1)
方法#1
您可以在这里使用漂亮的 importdata
-
lines_skip = 25;
values = importdata(inputfile,' ',lines_skip) %// using the delimiter ' ' here
values
将是一个包含inputfile
数据的结构。
因此,fourth column
将是values.data(:,4)
,而values.data(:,5)
将是fifth
,如此处所示 -
>> 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))
和{{1}}。