【发布时间】:2014-10-01 18:04:37
【问题描述】:
我尝试将文本文件中的数据导入 MATLAB,它具有以下结构:
** Porosity
**
*POR *ALL
0.1500 0.0900 2*0.1300 0.1400 4*0.1500 0.2200 2*0.1500 0.0500
0.0900 0.1400 5*0.1500 0.2300 0.2600 0.0800 0.1500 0.1500 0.2400 0.1700
[...]
标题显然必须被忽略。空格是分隔符,而* 表示相同的值出现多次,如* 之前的整数所示。
不幸的是,每行的条目数各不相同。理想情况下,我想将所有值存储在一个数组中,如下所示:
por = [0.1500 0.0900 0.1300 0.1300 0.1400 0.1500 0.1500 0.1500 0.1500 0.1500 0.2200 0.1500 0.1500 ...]
可以通过textscan 命令以某种方式解决这个问题吗?该文件相当大,有几十万个值,所以我需要一个快速的解决方案;)非常感谢帮助!
【问题讨论】:
-
到目前为止,您是否找到或尝试过任何代码,我们可以提供帮助?这将有助于获得快速、具体的解决方案。
-
是的,您可以使用 textscan。我会使用空格作为分隔符来阅读它,然后使用正则表达式来查找所有重复的数字。我可以提供一些伪代码,但如果您发布一些您自己尝试的代码供我们提供帮助会更好。
-
我对另一个文件的解决方案很慢,但在这种情况下,只有乘数 '2*' 和 '4*' 出现,并且这些值构成了一个定义良好的矩阵,每行的条目数一致。我先用 Excel 加载文件,将其保存为 .xlsx,然后用 xlsread 加载。然后我的代码将运行 for 和 if 循环来完成这项工作。这是一个相当费力和低效的问题解决方案。此外,现在我无法预测乘数,因此我无法将我的代码调整为新文件。我不熟悉 textscan 命令,但浏览我认为的其他帖子,这可能是一个解决方案。
-
以
fid = fopen('file'); data = textscan(fid,'%s','delimiter',' '); fclose(fid)开头。那么您将不得不检查data中的每个单元格以查找*并构建您的数字数组