【问题标题】:Importing data into Matlab from poorly formatted file将数据从格式不佳的文件导入 Matlab
【发布时间】:2012-05-31 12:01:48
【问题描述】:

我有大量需要解析的文本文件(制表符分隔的数据)。它们大多格式良好。但是,随机散布的行包含错误字符,如下所示。每个文件中坏行的位置不同,但添加的字符始终相同。

1   3
2   873
3   46
23  99798
23  1
353 79
"23 ,"  967
35  8028
253 615
"235 ," 3924
345 188
345 579
345 419
56  16835
23  449

importdata(filename) 将所有数据导入到第一个格式错误的行,然后忽略文件的其余部分。我想我可以结合使用 fopen 和 textscan 来做我想做的事情,但我似乎无法获得正确的参数组合来使其工作。

【问题讨论】:

    标签: matlab file-io import csv


    【解决方案1】:

    尝试使用带有%q 格式字符串的textread 函数。假设题中的测试数据保存为test.txt

    >> [a, b] = textread('test.txt', '%q %q');
    
    >> a'
    
    ans = 
    
      Columns 1 through 9
    
        '1'    '2'    '3'    '23'    '23'    '353'    '23 ,'    '35'    '253'
    
      Columns 10 through 15
    
        '235 ,'    '345'    '345'    '345'    '56'    '23'
    
    >> b'
    
    ans = 
    
      Columns 1 through 9
    
        '3'    '873'    '46'    '99798'    '1'    '79'    '967'    '8028'    '615'
    
      Columns 10 through 15
    
        '3924'    '188'    '579'    '419'    '16835'    '449'
    

    然后您可以使用str2double 删除a 中的尾随列。例如:

    >> str2double(a)'
    
    ans =
    
      Columns 1 through 13
    
         1     2     3    23    23   353    23    35   253   235   345   345   345
    
      Columns 14 through 15
    
        56    23
    

    【讨论】:

    • 谢谢!我的最终代码最终如下。 [a,b]=textread(文件名,'%q %q');数据=[str2double(a)str2double(b)];
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-11
    相关资源
    最近更新 更多