Ich habe Mühe, Zeichenfelder mit Sternchen ('*') in numerische Doppel zu konvertieren.Konvertieren eines Zeichenarrays, das Sterne enthält, in eine Zahl in MATLAB
Ich habe eine Zelle Array von Zeichen Vektoren basierend auf Daten aus einer .dat-Datei importiert. Zum Beispiel enthält das Zellenarray C
einer Spalte von Zellen (zB C{1,1}, C{2,1}, ... C{n,1}
), von denen jeder einen Zeichenvektor enthalten, zB C{1,1}
enthält:
'23.000 * * 1.000 1.000 1.000 34.000 5.065 6.719'
Wenn ich versuche C{1,1}
in einen numerischen Doppel, MATLAB konvertiert gibt eine leere Doppel zB
new_double = str2num(C{1,1})
new_double =
[]
Wenn ich das Sternchen manuell zu entfernen, der Code funktioniert:
new_double = str2num(C{1,1})
new_double =
23.0000 1.0000 1.0000 1.0000 34.0000 5.0650 6.7190
Alles, was ich tun möchte, ist die Daten in ein Doppel-Array für die weitere Verarbeitung zu lesen. Es ist mir egal, ob der Befehl die Sternchen ignoriert oder sie durch NaNs ersetzt - die Daten mit Sternchen sind für mich nicht wichtig. Was wichtig ist, ist, dass ich Daten aus den letzten zwei Spalten lese, z. B. 5.065 6,71. Leider kann ich sie nicht indexieren, da sie in einen Zeichenvektor eingebettet sind.
Ich habe auch versucht, mit:
c2 = C{1,1};
new_double = sscanf(c2,'%f%');
Aber es stoppt an dem Sterne zu lesen, zum Beispiel
new_double =
23
Ich habe weit und breit die einzigen nützlichen Beitrag Wesen gesucht: https://uk.mathworks.com/matlabcentral/answers/127847-how-to-read-csv-file-with-asterix jedoch Ich kann diese Methode nicht verwenden, weil ich von einem Zeichenvektor anstelle von abgegrenzten Daten arbeite.
Clever. Sicherlich schlägt der Regex-Ansatz. Ich wusste nicht, dass 'str2double' das könnte. – rayryeng
@rayryeng Danke! Mit einem Regex ist auch ein schöner Ansatz –
Vielen Dank für Ihre informative und schnelle Antworten. Ich lernte ein Los von von beiden. Zeit, um über "strsplit" zu sprechen !! – PyjamaNinja