【求助】如何删除元胞数组中符合要求的行
本帖最后由 upc1984 于 2010-9-17 23:30 编辑A=
'# EXTRAS '
'# SOMA_AREA '
'# SHRINKAGE_CORRECTION '
'# VERSION_NUMBER '
'# VERSION_DATE '
'# ********************************************* '
'# SCALE 1.0 1.0 1.0 '
' 1 1 0. 0. 0. 48.80-1 '
' 2 3 68. 73. -75. 3.44501 '
' 3 3 103. 108. -150.20 4.1052 '
' 4 3 202. 70. -225. 1.9853 '
' 5 3 306. 94. -225. 1.8554 '
' 6 3 518. 119. -225. 0.7955 '
' 7 3 664. 32. -388.70 0.3956 '
' 8 3 445. 91. -336.1 1.3255 '
' 9 3 581. 121. -447. 1.068 '
我想把此元胞中带'#'开头的都去掉,即只留下数字数据,并且转为矩阵,应该怎么样操作?
我的操作A(cellfun('isreal',A))怎么不能实现呢? 本帖最后由 feynmand 于 2010-9-18 00:06 编辑
For logical and char data classes, isreal always returns true. For numeric data types, if A does not have an imaginary part isreal returns true; if A does have an imaginary part isreal returns false. For cell, struct, function_handle, and object data types, isreal always returns false.
你这里应该是字符串类型,不能用isreal,应该用正则表达式。如果你需要对数据进行计算应该还需要进行类型的转换。regexprep,这个函数应该有用 2# feynmand
clear;clc;close all
a={'# EXTRAS '
'# SOMA_AREA '
'# SHRINKAGE_CORRECTION '
'# VERSION_NUMBER '
'# VERSION_DATE '
'# ********************************************* '
'# SCALE 1.0 1.0 1.0 '
' 1 1 0. 0. 0. 48.80-1 '
' 2 3 68. 73. -75. 3.44501 '
' 3 3 103. 108. -150.20 4.1052 '
' 4 3 202. 70. -225. 1.9853 '
' 5 3 306. 94. -225. 1.8554 '
' 6 3 518. 119. -225. 0.7955 '
' 7 3 664. 32. -388.70 0.3956 '
' 8 3 445. 91. -336.1 1.3255 '
' 9 3 581. 121. -447. 1.068 '};
b=cell2mat(cellfun(@str2num,a(cellfun(@isempty,strfind(a,'#'))) ,'UniformOutput', false))
>> b
b =
1.0000 1.0000 0 0 0 48.8000 -1.0000
2.0000 3.0000 68.0000 73.0000-75.0000 3.4450 1.0000
3.0000 3.0000103.0000108.0000 -150.2000 4.1050 2.0000
4.0000 3.0000202.0000 70.0000 -225.0000 1.9850 3.0000
5.0000 3.0000306.0000 94.0000 -225.0000 1.8550 4.0000
6.0000 3.0000518.0000119.0000 -225.0000 0.7950 5.0000
7.0000 3.0000664.0000 32.0000 -388.7000 0.3950 6.0000
8.0000 3.0000445.0000 91.0000 -336.1000 1.3250 5.0000
9.0000 3.0000581.0000121.0000 -447.0000 1.0600 8.0000
本帖最后由 feynmand 于 2010-9-18 22:40 编辑
>> c=regexprep(a,'#\D*','')
c =
''
''
''
''
''
''
'1.0 1.0 1.0 '
' 1 1 0. 0. 0. 48.80-1 '
' 2 3 68. 73. -75. 3.44501 '
' 3 3 103. 108. -150.20 4.1052 '
' 4 3 202. 70. -225. 1.9853 '
' 5 3 306. 94. -225. 1.8554 '
' 6 3 518. 119. -225. 0.7955 '
' 7 3 664. 32. -388.70 0.3956 '
' 8 3 445. 91. -336.1 1.3255 '
' 9 3 581. 121. -447. 1.068 '
想到这里了,然后还没找到感觉很简便的方法继续下一步。
再汗一个, '1.0 1.0 1.0 '这一行不应该出现的,好久不用正则表达式,结果忘了该怎么搞了。
页:
[1]