upc1984 发表于 2010-9-17 21:47:32

【求助】如何删除元胞数组中符合要求的行

本帖最后由 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:03:52

本帖最后由 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,这个函数应该有用

qibbxxt 发表于 2010-9-18 21:32:03

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:37:40

本帖最后由 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]
查看完整版本: 【求助】如何删除元胞数组中符合要求的行