2016-08-18 4 views
0

Ich habe diese Rohdaten (String). Ich möchte es zuerst in Zahlen ändern und dann die dritte Spalte durch Entfernen des Schrägstrichs in zwei aufteilen, so dass meine endgültige Antwort eine vier (4) Spaltenmatrix ist.Extrahieren von Daten aus einer Matrix

[-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

haben Sie sich 'strsplit'? https://uk.mathworks.com/help/matlab/ref/strsplit.html – GameOfThrows

+0

Sind die eckigen Klammern in den Beispieldaten Teil der Zeichenfolge, oder sind sie Zeichenfolgen in separaten Zellen? – Tar

Antwort

0

Angenommen, die Eingangsdaten in Input.txt Datei.
Ausgabematrix ist A.
Der Code liest Zeilen Formular in String und verwenden sscanf, um die Zeichenfolge in Vektor zu analysieren.
Jeder geparste Vektor wird an der Unterseite der Matrix A angehängt.
Der Codetest für den Sonderfall, wenn die Zeichenfolge keine Division hat (wobei das letzte Element NaN ist).

Folgendes überprüfen:

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); 
Verwandte Themen