【问题标题】:Matlab: Textscan with blank spacesMatlab:带有空格的文本扫描
【发布时间】:2013-08-15 17:11:39
【问题描述】:

我有一个格式如下的文本文件:

3,4, ,CMX COP,JUL11,ABCD4,APPM,CME,4PTS09,F,HG,27, , ,1,4.3,2,27,23,1,NCAP1,0
5,6, ,AUD,JUN11,ABCD4,APPM,CME,4PTS09,F,6A,11, , ,1,1.7,10,27,23,1,NCAP1,0

我正在尝试使用 textscan 读取它,但我不知道如何处理空格。我试过了:

filename = 'E:\20110427.csv';

fileid = fopen(filename,'rt');
Data = textscan(fileid, '%d,%d,%c,%s,%s,%s,%s,%s,%s,%s,%s,%d,%c,%c,%d,%f,%d,%d,%d,%d,%s,%d')

CMX 和 COP 之间的空格似乎将其排除在外,还有逗号之间的空格。有什么建议吗?

CMX COP 是一回事。删除空间就好了。

【问题讨论】:

    标签: matlab textscan


    【解决方案1】:

    您需要为 textscan 使用'Delimiter' 选项(我还将空格上的 %c 更改为 %s 以避免读取分隔符)。

    str = '5,6, ,AUD,JUN11,ABCD4,APPM,CME,4PTS09,F,6A,11, , ,1,1.7,10,27,23,1,NCAP1,0';
    Data = textscan(str, '%d%d%s%s%s%s%s%s%s%s%s%d%s%s%d%f%d%d%d%d%s%d', 'Delimiter', ',');
    

    【讨论】:

    • 如何使文件的每一行都有效?这适用于仅读取第一行。
    • 我不明白为什么你只能阅读第一行。如果我将你的两行放入一个 csv 文件并使用我的方法与文件 Id 我得到数据是一个 1x22 单元格,其中每个单元格都有来自文件每一行的值。
    • 知道了。我犯了一个错误,之前将 str 定义为第一行。谢谢!
    【解决方案2】:

    或者你可以使用函数regexp

    A = '3,4, ,CMX COP,JUL11,ABCD4,APPM,CME,4PTS09,F,HG,27, , ,1,4.3,2,27,23,1,NCAP1,0';
    regexp(A,'\w','match')
    

    【讨论】:

      【解决方案3】:

      如果每个留置权上总是缺少相同的值,您可以告诉 matlab 使用多个分隔符作为一个:

      C = textscan(fileID,'%f %f %f %f','Delimiter',',','MultipleDelimsAsOne',1);
      

      其中 1 表示正确。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多