在matlab中导入没有恒定行长的固定宽度数据
Posted
技术标签:
【中文标题】在matlab中导入没有恒定行长的固定宽度数据【英文标题】:Importing fixed width data without constant row length in matlab 【发布时间】:2014-03-17 03:01:52 【问题描述】:由于文件的格式,我在尝试使用代码(不使用“变量 -> 导入数据”功能)在 matlab 中导入 this data 时遇到了困难。我真的想不出使用通常的加载命令而不涉及编辑文件的解决方案。我试过使用
data=dlmread(File, '\t', [27 0 7865 9]); % 27 is the starting row and 7865 the ending row for the first set data
根据我的说法,它应该可以工作,但它会在没有任何明显原因的情况下停止加载第 2400 行中的数据(时间变量是 58,它应该在 200 左右结束)。非常感谢您的指导!
另一个问题是数据是这样排列的
garbage
...
time1 data1 time2 data2 ...
time11data11...
并且当时间变量开始使用 6 位数字(例如 100.025)时,数据点之间开始不再存在空白,因此在这种情况下将无法识别任何像空格这样的分隔符。例如,
108.900 -0.000108.905 -0.005108.910 -0.006108.915 -0.006108.920 -0.003
表示
108.900 -0.000 108.905 -0.005 108.910 -0.006 108.915 -0.006 108.920 -0.003
之所以如此,是因为数据有 3 位小数。
任何提示都会有所帮助。
【问题讨论】:
请在问题行前加上问题行。 另外,作为人类,您如何知道划分数据的正确位置? 我根据您的要求进行了编辑。数据有 3 位小数。 【参考方案1】:我认为您需要逐行读取输入数据,并在带有所需数字的行上使用正则表达式,示例如下:
% regular pattern to read your numbers. This is constructed based on the
% example data file you provided.
regPattern = '-?\d1,3\.\d3';
% example of nicely separated values:
s1 = ' 0.100 0.000 0.105 -0.000 0.110 -0.000 0.115 0.000 0.120 -0.000';
r1 = regexp(s1, regPattern, 'match');
% example of non-separated values:
s2 = '108.900 -0.000108.905 -0.005108.910 -0.006108.915 -0.006108.920 -0.003';
r2 = regexp(s2, regPattern, 'match');
结果是:
r1 =
'0.100' '0.000' '0.105' '-0.000' '0.110' '-0.000' '0.115' '0.000' '0.120' '-0.000'
r2 =
'0.100' '0.000' '0.105' '-0.000' '0.110' '-0.000' '0.115' '0.000' '0.120' '-0.000'
【讨论】:
以上是关于在matlab中导入没有恒定行长的固定宽度数据的主要内容,如果未能解决你的问题,请参考以下文章