使用Matlab可靠地读取列表数据文件

开普代码

我正在尝试访问由测量设备生成的文本文件中的数字数据。文件是字符串和数字的混合,项目由制表符分隔。它不是矩形的,这使其不适用于matlab的文件加载功能,例如dlmread。我可以将文件转换为exel电子表格,并使用xlsread加载它们,但是由于我要处理数百个文件,因此这不是我的选择。

这些文件如下所示:

Heading String  
Commenttext 
X Axis  Trace A Trace B 
Frequency   Funct Ch1   Funct Ch2   
Frequency / Hz  Funct Ch1 / dBr Funct Ch2 / dBV 
Hz  dBr dBV 
LOG LIN LIN 
100 -60.35  -71.1446    
10000   -7.48178    -12.0321    
VOID    VOID    VOID    
VOID    VOID    VOID    
Scan #-5    Labeltext   Labeltext   
Hz  V   V   
1.000000000000e+003 3.999999910593e-002 1.000000000000e+000 
A-X/37   A-Y     A-LimLow    A-LimUpp   A-RefY in V     B-X/37   B-Y    B-LimLow    B-LimUpp    B-RefY in V     
1.000000000000e+002 -4.873095199691e+001    VOID    VOID    3.999999910593e-002 1.000000000000e+002 -2.026775796775e+001    VOID    VOID    1.000000000000e+000 
1.172102297533e+002 -4.492478734843e+001    VOID    VOID    3.999999910593e-002 1.172102297533e+002 -2.024411835772e+001    VOID    VOID    1.000000000000e+000 
1.373823795883e+002 -3.994765661259e+001    VOID    VOID    3.999999910593e-002 1.373823795883e+002 -2.022767912575e+001    VOID    VOID    1.000000000000e+000 
1.610262027561e+002 -3.628116388971e+001    VOID    VOID    3.999999910593e-002 1.610262027561e+002 -2.021939551014e+001    VOID    VOID    1.000000000000e+000 
1.887391822135e+002 -3.285059881019e+001    VOID    VOID    3.999999910593e-002 1.887391822135e+002 -2.021928320409e+001    VOID    VOID    1.000000000000e+000 
2.212216291070e+002 -2.987476652701e+001    VOID    VOID    3.999999910593e-002 2.212216291070e+002 -2.022570411546e+001    VOID    VOID    1.000000000000e+000 
2.500000000000e+002 -2.751190343935e+001    VOID    VOID    3.999999910593e-002 2.500000000000e+002 -2.023346726318e+001    VOID    VOID    1.000000000000e+000 
2.592943797405e+002 -2.728162367715e+001    VOID    VOID    3.999999910593e-002 2.592943797405e+002 -2.023601503648e+001    VOID    VOID    1.000000000000e+000

等等

请注意:-扫描#-5前面的值告诉我文件中有多少重复-AX / 37告诉我每次扫描有多少行。-如果适用,“ VOID”元素将替换为实际数字,反之亦然。

我希望能够提取存在的值,并且我的脚本不依赖于迹线的大小,重复次数或值是数字还是“ VOID”。

到目前为止,根据其他方面的技巧,我已经能够创建一个包含文件行的数组,并提取出每行的前两个数字,如下所示:

fid=fopen('data.txt');
Rows = textscan(fid,'%s', 'delimiter','\n'); %Creates a temporary array with the rows of the file
fclose(fid);
TraceStarts=strfind(Rows{1,1},'Scan'); %Looks for the start of each trace..
TracesIdx = find(~cellfun('isempty', TraceStarts)); %.. and stores the indexes.
Traces= cellfun(@(x) textscan(x,'%f','delimiter','\t', 'CollectOutput',1), Rows{1,1});

然后,“迹线”是一个包含每行数组的单元格,每行最多包含两个第一个数字。为什么它发现2后就停止连续搜索浮动项,这对我来说还是个谜...我不想在每一行中指定数字和字符串的顺序,因为它们可能会有所不同。

任何帮助将非常感激。

马特·B。

textscan由于VOID元素,仅报告了两个元素。只需告诉textscan将其视为“空”,即可将其读取为NaN。请参阅textscan文档TreatAsEmpty中的名称/值”对

>> str = '1.000000000000e+002 -4.873095199691e+001    VOID    VOID    3.999999910593e-002 1.000000000000e+002 -2.026775796775e+001    VOID    VOID    1.000000000000e+000';
>> textscan(str,'%f','delimiter','\t', 'CollectOutput',1)
ans = 
    [2x1 double]
>> textscan(str,'%f','delimiter','\t', 'CollectOutput',1,'treatAsEmpty',{'VOID'})
ans = 
     [10x1 double]
>> ans{1}
ans =
                       100
           -48.73095199691
                       NaN
                       NaN
          0.03999999910593
                       100
           -20.26775796775
                       NaN
                       NaN
                         1

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从文件可靠地读取n个字节

来自分类Dev

如何根据输入值可靠地计算数据列表中的匹配数?

来自分类Dev

我可以可靠地使用python字典键方法生成的列表索引吗?

来自分类Dev

可靠地读取Python中的循环变量

来自分类Dev

如何可靠地确定最近7天未使用的所有文件夹?

来自分类Dev

如何可靠地确定最近7天未使用的所有文件夹?

来自分类Dev

在Matlab中自动读取包含特殊字符的数据文件

来自分类Dev

Matlab的包装程序,用于读取稀疏数据文件

来自分类Dev

可靠地持久保存少量数据的最佳方法?

来自分类Dev

从SQLite可靠地获取数据而无需重复

来自分类Dev

如何可靠地将数据移动到Windows?

来自分类Dev

可靠地创建.DS_Store文件

来自分类Dev

重复符号后如何可靠地使用dlsym?

来自分类Dev

使用upstart或runit可靠地重启服务

来自分类Dev

将“$!” 使用“&”可靠地返回正确的 ID?

来自分类Dev

可靠地识别 JPG?

来自分类Dev

如何使用 discord.py 从某些选项列表中可靠地将用户输入作为变量获取?

来自分类Dev

如何可靠地使用镶木地板文件中的日期时间值来填充(雪花)表

来自分类Dev

我可以可靠地使用dd擦除运行中的Linux服务器上的根文件系统吗?

来自分类Dev

如何使用GLPK中的坐标读取数据文件

来自分类Dev

使用python将数据文件读取到数组

来自分类Dev

使用c3.js读取csv数据文件

来自分类Dev

从数据文件创建列表

来自分类Dev

从数据文件中读取数据点

来自分类Dev

有选择地读取C ++中的格式化数据文件

来自分类Dev

从子流程标准输出可靠地进行非阻塞读取

来自分类Dev

从已安装的Web应用程序可靠地读取注册表

来自分类Dev

C# 可靠地读取蓝牙流(InTheHand 32feet)

来自分类Dev

如何可靠地剥离Matlab代码中的大多数注释?

Related 相关文章

  1. 1

    从文件可靠地读取n个字节

  2. 2

    如何根据输入值可靠地计算数据列表中的匹配数?

  3. 3

    我可以可靠地使用python字典键方法生成的列表索引吗?

  4. 4

    可靠地读取Python中的循环变量

  5. 5

    如何可靠地确定最近7天未使用的所有文件夹?

  6. 6

    如何可靠地确定最近7天未使用的所有文件夹?

  7. 7

    在Matlab中自动读取包含特殊字符的数据文件

  8. 8

    Matlab的包装程序,用于读取稀疏数据文件

  9. 9

    可靠地持久保存少量数据的最佳方法?

  10. 10

    从SQLite可靠地获取数据而无需重复

  11. 11

    如何可靠地将数据移动到Windows?

  12. 12

    可靠地创建.DS_Store文件

  13. 13

    重复符号后如何可靠地使用dlsym?

  14. 14

    使用upstart或runit可靠地重启服务

  15. 15

    将“$!” 使用“&”可靠地返回正确的 ID?

  16. 16

    可靠地识别 JPG?

  17. 17

    如何使用 discord.py 从某些选项列表中可靠地将用户输入作为变量获取?

  18. 18

    如何可靠地使用镶木地板文件中的日期时间值来填充(雪花)表

  19. 19

    我可以可靠地使用dd擦除运行中的Linux服务器上的根文件系统吗?

  20. 20

    如何使用GLPK中的坐标读取数据文件

  21. 21

    使用python将数据文件读取到数组

  22. 22

    使用c3.js读取csv数据文件

  23. 23

    从数据文件创建列表

  24. 24

    从数据文件中读取数据点

  25. 25

    有选择地读取C ++中的格式化数据文件

  26. 26

    从子流程标准输出可靠地进行非阻塞读取

  27. 27

    从已安装的Web应用程序可靠地读取注册表

  28. 28

    C# 可靠地读取蓝牙流(InTheHand 32feet)

  29. 29

    如何可靠地剥离Matlab代码中的大多数注释?

热门标签

归档