我正在尝试创建一个代码来导入包含文本和数据的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]
任何想法如何实现这些任何想法,将不胜感激,最好是第二种选择,如果更容易的话。我希望我能够很好地解释这一点,如果我没有,请对不起。 感谢