评估矩阵中的单元格以确定它是否包含文本或数据,然后将该列提取为矩阵

时间:2012-07-15 22:24:01

标签: matlab

我正在尝试创建一个代码来导入包含文本和数据的csv文件。我不能使用xlsread,因为我希望它可以在没有excel的机器上使用。因此我想使用“importdata”。

假设我使用'importdata'导入文件并获取'textdata'矩阵,如下所示(没有数据矩阵,因为最后一列有非标题文本):

Header(1,1)  Header(1,2)    Header(3,4) Header(1,4) Header(1,5)

Txt (2,1)   Txt(2,2)        Num(2,3)    Num(2,4)    Txt(2,5)

Txt(3,1)        Txt(3,2)        Num(3,3)    Num(3,4)    Num(3,5)

Txt(4,1)        Txt(4,2)        Num(4,3)    Num(4,4)    Txt(4,5)

是否有某种方法让Matlab评估单元格(忽略标题行)并确定内部的字符串是否实际上是文本或数字。然后将包含数字的列提取到单独的字符串矩阵中。所以上面的textdata最终会成为下面的字符串矩阵:

Data1= [Header(1,3); Num(2,3);Num(3,3),Num(4,3)]

Data2=[Header(1,4);Num(2,3);Num(3,3);Num(4,3)]

Data3=[Header(1,5);Txt(2,5);Num3,5);Txt(4,5)]

我看到了两种方法:

1 - 漫长的道路。评估标题行之后的每个单元格,以确定它是数字还是字符串。然后如上所述将带有数字的列提取到Matrices中,命名第一个提取的列data1等...将列中的任何文本字符串转换为大数(以字符串形式),提取的列矩阵(具有混合数字和文本数据的列).Eg

Data3=[Header(1,5); 100000; Num(3,5); 100000)]

然后我可以将这些字符串组合在一个矩阵中,删除标题行,将它们转换为数字(str2num),然后创建一个数据结构(我可以自己做最后一点)。

2 - 更快的方式?评估第2行中的所有单元格并提取与上面相同的列。然后运行删除每一行的第一行并将其命名为header1,header2等....然后获取每个数据的实际数据矩阵并将其转换为数字。然后,如果转换失败,那里必须有一个字符串。因此,在失败时,它会评估失败矩阵中的每个单元格。例如

Data1= [Header(1,3); Num(2,3);Num(3,3),Num(4,3)]

Data2=[Header(1,4);Num(2,3);Num(3,3);Num(4,3)]

Data3=[Header(1,5);Txt(2,5);Num3,5);Txt(4,5)] 

会产生:

Header1 = [Header(1,3)]

Data1= [Num(2,3);Num(3,3),Num(4,3)]

Header2=[Header(1,4)]       
Data2=[Num(2,3);Num(3,3);Num(4,3)]

Header3=[Header(1,4)]       
Data3=[ Txt(2,5);Num(3,5);Txt(4,5)] 

Data1和Data2都将从str3num转换,但Data3将失败(使用str2num)。因此,如果它失败,则评估该矩阵中的每个单元格,并将每个文本更改为100000个字符串。然后将其转换为数字。  因此

Data3 = [100000;Num(3,5);100000]

任何想法如何实现这些任何想法,将不胜感激,最好是第二种选择,如果更容易的话。我希望我能够很好地解释这一点,如果我没有,请对不起。 感谢

0 个答案:

没有答案