Ich versuche eine Matlab-Funktion zu schreiben, die Daten in eine Matrix lädt. Das Problem ist, dass die Daten in jeder Zeile einen Wert mehr haben. Daher kann ich load leider nicht verwenden und versuche es stattdessen mit fgetl.
Die Daten sehen so aus:
143234
454323 354654
543223 343223 325465
etc
Was ich gemacht habe, ist eine Matrix mit Nullen zu erstellen, deren Dimensionen die Höhe und die Länge der längsten Datenzeichenfolge sind. Um die Daten in die Matrix zu setzen, habe ich fgetl verwendet, um jede Zeile zu lesen, und dann textscan, um die Daten an Leerzeichen zu trennen. Dann habe ich str2num verwendet (hier denke ich liegt der Fehler), um die Zeichenfolge in eine Zahl umzuwandeln.
Hier ist mein Code:
%READTRI Öffnet die Dreiecks-Datendatei und wandelt sie in eine Matrix um
fid = fopen('triangledata.dat');
%erstelle eine Matrix mit Nullen, um die abgerufenen Daten einzufügen
trimat = zeros(15,15);
%Überprüfen, ob die Datei ordnungsgemäß geladen wurde
if fid == -1
disp('Fehler beim Laden der Datei')
else
%wenn ja, fortfahren
%lese jede Datenzeile in a
while feof(fid) == 0
%zeilenweise durchlaufen
aline = fgetl(fid);
%aline in Teile an Leerzeichen aufteilen
splitstr = textscan(aline,'%s','delimiter',' ');
%Dies bestimmt in welche Zeile der Matrix die for-Schleife schreibt
rowCount = 1;
%durchlaufe die Zellmatrix, um die Zahlen zu erhalten und in die Matrix zu schreiben
for i = 1:length(splitstr)
%in Zahl umwandeln
num = str2num(splitstr{i});
%Zahl in Matrix schreiben
trimat(rowCount, i) = num;
end
%rowCount erhöhen
rowCount = rowCount + 1;
end
%Datei schließen
closeresult = fclose(fid);
%auf Fehler überprüfen
if closeresult == 0
disp('Datei erfolgreich geschlossen')
else
disp('Datei konnte nicht geschlossen werden')
end
end
end
Der Fehler, den ich erhalte, ist:
Fehler bei der Verwendung von str2num (Zeile 33)
Eingabe erfordert eine Zeichenfolge oder Zeichenfolgenarray.
Fehler in readTri (Zeile 32)
num = str2num(splitstr{i});
Was mich stört ist, dass wenn ich im interaktiven Konsolenfenster dasselbe mache, was in der Schleife passiert, d.h. aline importiere, sie in eine Zellmatrix mit textscan aufteile und dann num2str verwende, um sie in eine ganze Zahl umzuwandeln, alles funktioniert. Entweder ist die Art und Weise, wie ich num2str verwende, falsch oder die for-Schleife macht etwas Seltsames.
Ich hoffte nur auf Ideen, es gibt VIEL Daten, daher ist es nicht möglich, Nullen hinzuzufügen, damit load funktioniert.
Vielen Dank fürs Lesen!