【问题标题】:Data separation by particular rows in MatlabMatlab中特定行的数据分离
【发布时间】:2012-11-10 02:27:59
【问题描述】:

我对使用 Matlab 比较陌生,而且我也没有太多关于编程的知识。对于我目前正在从事的项目,我需要处理大量使用以下格式记录的数据。

$GPRMC,202124.985,V,,,,,,,091112,,,N*44
2038,4674,4667,5593,3379
2087,5133,5111,6084,3372
2138,5134,5114,6080,3376
2188,5133,5114,6084,3377
2238,5130,5113,6084,3410
2287,5134,5113,6080,3416
2337,5133,5110,6080,3417
2387,5133,5110,6084,3416
2438,5130,5113,6081,3396
2487,5132,5110,6080,3410
$GPRMC,202125.985,V,,,,,,,091112,,,N*45
2985,5130,5113,6085,3988
3035,5130,5118,6084,4541
3085,5138,5113,6082,5186
3135,5130,5114,6081,6001
3185,5134,5110,6084,6311
3234,5134,5113,6084,6319
3284,5131,5114,6084,6316
3339,5131,5110,6084,6260
3389,5130,5114,6080,6178
3438,5134,5110,6085,6077
$GPRMC,202126.985,V,,,,,,,091112,,,N*46
3942,5131,5114,6085,5916
3992,5130,5110,6084,5917
4042,5133,5110,6084,5950
4091,5131,5114,6080,5996
4142,5134,5114,6085,6062
4192,5134,5114,6084,6129
4242,5134,5110,6080,6150
4291,5130,5110,6079,6186
4341,5130,5110,6089,6246
4391,5130,5118,6083,6266

这样一直持续到文件结束。我想要做的是能够分离数据,以便所有“$GPRMC”字符串(行)在一个文件或数组中作为文本(未分隔)一起列出,而所有其他行(数字)一起列出在一个文件数组中(逗号分隔是可取的)。甚至可能吗?如果是,请指点一下好吗?

【问题讨论】:

    标签: matlab


    【解决方案1】:

    不太清楚你所说的分开或不分开是什么意思。如果您将发布的文本复制到 testf.dat 之类的文件中,那么使用 fopenfprintffgets 的简单脚本可能就是您要查找的内容:

    infile = fopen('testf.dat');                                                        
    outf1 = fopen('GPRMC.dat','w');                                                 
    outf2 = fopen('nums.dat','w');                                                  
    
    tline = fgets(infile);                                                          
    while ischar(tline)                                                             
        if tline(1:6) == '$GPRMC'                                                   
            fprintf(outf1,tline);                                                   
        else                                                                        
            fprintf(outf2,tline);                                                   
        end                                                                         
        tline = fgets(infile);                                                      
    end                                                                             
    
    fclose(infile);                                                                 
    fclose(outf1);                                                                  
    fclose(outf2);
    

    【讨论】:

    • 首先非常感谢您的回复。这正是我想要的,但有一个小故障,也许你可以帮助解决。当我运行您的代码时,它会按预期创建两个新的 .dat 文件。之后第一行($GPRMC 行)被写入 GPRMC.dat 文件,程序停止并出现以下错误.... ???索引超出矩阵尺寸...我还尝试从原始 testf.dat 文件中删除第一行 $GPRMC ,以便第一行(以及后面的 9 行)是数字数据。这次将 10 个数字行传输到 nums.dat 时出现相同的错误。
    • 嗨,我稍微更改了代码,对于我使用的 if 语句 if tline(1) == '$'... 这次没有错误,它运行良好....所以谢谢很多。我现在遇到的另一个问题是它在 num.dat 文件中的 10 个数字行之间留下了空白行。我可以删除那些吗?
    猜你喜欢
    • 2019-11-22
    • 2017-08-16
    • 2014-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多