我有一个有格式的文本文件
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类型的数组。
我如何用数字代替字符?
发布于 2015-06-26 15:35:56
使用您以前使用的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请注意,上面将删除对每个数字的任何前导零,这是有意义的,因为这些没有添加任何有意义的数字解释。
https://stackoverflow.com/questions/31076997
复制相似问题