data=textscan(tline,'%*s %*d %8f %8f %8f'); % zerteil den eingelesenen String in ein cell-array
K(:,c) = cell2mat(data); % fomatierung des cell-array in eine Matrix
c = c+1;
elseifstrfind(tline, 'CTETRA')==1% Elementdefinition
data=textscan(tline,'%*s %*d %d %f %f %f %f %f %f');
E(:,d) = cell2mat(data);
d = d+1;
end
Mein Problem ist, dass meine Koordinaten auch mehr als 4 Stellen hinter dem Komma haben (aber nicht mehr als 8 Zeichen lang sind) und die Elemente (CTETA) über 2 Zeilen definiert werden.
Benötigen tue ich die exaten Koordinaten (also nicht gerundet) in einer Matrix und für jedes Element die beteiligten Knotennummern in einer Matrix.
Ich habe nur keine Ahnnung wie ich es anstellen soll und wäre für jede Hilfe dankbar.
Ein großes Problem bei meinem Code ist auch, dass die letzte Zahl in der ersten Zeile der Elementdefinition nicht ausgelesen wird, da ein Plus am ende steht:
"1234+"
Dies wird nicht als Zahl erkannt. Ich habe schon probiert mit %4f die Anzahl der Ziffern einzustellen aber ohne Erfolg.
Gibt es einen Befehl mit dem ich bestimmte Stellen eines Strings ausschneiden kann?
Alle Angaben stehen nämlich immer an der exakt gleichen Stelle der Zeile.
Hallo Steven,
die Daten in der Datei sind leider sehr schlecht.
Dann man die nicht mit einem Trennungszeichen abspeichern?
Folgendes Beispiel in der GRID Zeile 3284:
GRID 3284 -4.54405 -10.86816.21494
Sind die Zahlen jetzt:
-4.54405 -10.868 16.21494
oder
-4.54405 -10.8681 6.21494
Durch die mangelnden Trennungszeichen der Zahlen, ist es sehr schwer was passendes zu finden.
_________________
Ja das stimmt, aber leider kann & darf ich die Datei nicht verändern da noch andere Programme drauf zugreifen.
Ich weiß aber, das alles einträge max. 8 Stellen besitzen und kann sie so auch auschneiden - das funktioniert auch prima.
Mein Code funktioniert auch soweit ganz leidlich und mittlerweile so aus:
while tline~=-1 %alle Dateizeilen durchgehen
tline = fgetl(fid);
ifstrfind(tline,'GRID')==1% Knotendefinition % Knoten_nummer = str2double(tline(8:16)); % x_Koord = str2double( tline(25:32)) ;
data = textscan(tline,'%*s %8f %8f %8f %8f'); % Zerteilt den eingelesenen String in ein cell-array
K(:,c) = cell2mat(data); % Fomatierung des cell-array in eine Matrix
c = c+1;
Wenn du eine Ahnung hast wie man das eleganter lösen könnte wäre ich dir sehr dankbar =).
Ein Problem ist auch, das die Zeilen die mit CTETRA anfangen 1, 2 oder 3 Zeilen lang sein können, die ich alle in die gleiche Matrix packen muss.
Momentan komme ich mit zwei Zeilen klar, ist nur nicht sehr elegant.
Mein größtes Problem liegt allerdings darin das Matlab immer auf 4 Stellen nach dem Komma rundet. Kann man das irgendwie umgehen?
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.