我有一个格式为
的文本文件2..4..6.7
.1.2.3.5.
34.7..89.
期望的输出:
A = 3x9 cell
1x9 double: 200400607
1x9 double: 010203040
1x9 double: 340700890
我可以像这样读取文件
importdata('inputname.txt')
但是它们仍然是char类型的数组而不是double类型。
如何用数字替换字符?
答案 0 :(得分:1)
使用之前的importdata
选项:
data = importdata('inputname.txt');
现在,您可以通过字符串操作将所有.
个字符替换为0
。使用strrep
执行此操作:
data = strrep(data, '.', '0');
我们得到:
data =
'200400607'
'010203050'
'340700890'
某些旧版本的MATLAB没有strrep
。如果不这样做,请通过regexprep
使用正则表达式为您完成此操作:
data = regexprep(data, '\.', '0');
现在,最后一项任务是将每个单元格转换为单独的数字,您可以使用cellfun
并循环遍历每个单元格,并使用0
的ASCII代码减去每个字符数组以获取你想要的数字数组。这将被类型转换为double
数组,并通过减去0
的ASCII代码,您将获得0到9之间的数字:
data = cellfun(@(x) x - '0', data, 'uni', 0);
我们得到:
>> celldisp(data)
data{1} =
2 0 0 4 0 0 6 0 7
data{2} =
0 1 0 2 0 3 0 5 0
data{3} =
3 4 0 7 0 0 8 9 0
但是,如果你想要实际的完整数字本身而不是将其分成字符,那么只需使用str2double
代替:
data = cellfun(@str2double, data);
你会得到:
>> data
data =
200400607
10203050
340700890
请注意,上面的内容会删除每个数字的前导零,这有意义,因为它们不会对数字的解释添加任何有意义的内容。