2016-08-18 149 views
0

我有这个原始(字符串)数据。我想先将它改为数字,然后通过删除斜杠将第三列分成两部分,这样我的最终答案将是一个四(4)列矩阵。从矩阵中提取数据

[-0.095] [ 3.251] '0.152/0.0415' 
[ NaN] [ NaN] [   NaN] 
[ 3.194] [ 3.194] [   NaN] 
[ 3.251] [ 9.911] '0.152/0.0387' 
[ NaN] [ NaN] [   NaN] 
[ 9.854] [ 9.854] [   NaN] 
[ 9.911] [16.571] '0.152/0.0387' 
[ NaN] [ NaN] [   NaN] 
[16.514] [16.514] [   NaN] 
[16.571] [23.211] '0.129/0.0535' 
[23.154] [23.154] [   NaN] 
[23.211] [29.851] '0.129/0.0535' 
[29.794] [29.794] [   NaN] 
+1

你看着'strsplit'? https://uk.mathworks.com/help/matlab/ref/strsplit.html – GameOfThrows

+0

您的示例数据是字符串中的方括号,还是它们表示分隔单元格中的字符串? – Tar

回答

0

假设输入数据在Input.txt文件中。
输出矩阵为A.
该代码读取从文件到字符串的行,并使用sscanf将字符串解析为向量。
每个解析的向量附加到矩阵A的底部。
当字符串没有除法(其中最后一个元素是NaN)时的特殊情况的代码测试。

检查以下内容:

f = fopen('Input.txt', 'r'); 

A = []; 

while ~feof(f) 
    s = fgets(f); %Read row from file. 

    if isempty(strfind(s, '/')) 
     Q = [sscanf(s, '[%f] [%f]'); NaN; NaN]; %First case: last element is NaN: [ 3.194] [ 3.194] [   NaN] 
    else 
     Q = sscanf(s, '[%f] [%f] ''%f/%f'''); %Second case: last element is x/y: [ 3.251] [ 9.911] '0.152/0.0387' 
    end 

    %Concatenate vector Q to the bottom of A matrix; 
    A = [A; Q'];  
end 

fclose(f);