在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中导入没有恒定行长的固定宽度数据的主要内容,如果未能解决你的问题,请参考以下文章

sqoop如何在增量导入中导入固定数量的行?

跨元素的舍入固定表格布局单元格宽度百分比计算

从固定宽度的大文本中解析未排序的数据

ggplot条形图中的恒定宽度

flex布局 一侧固定宽度 一侧自适应

在数据文件中手动定义固定宽度