Also ich öffne mein Abaqus Input File und Suche dann einmal die Zeile "*Node"...nach dieser beginnen meine Knotenpunkte mit Koordinaten. Diese laufe ich durch bis zum nächsten Keyword "*???" und schreibe diese Zeilenweise in den Cell-Array. Nun ist mein Code sehr langsam (ca. 120000 Zeilen im Input File), das Format der Koordinaten passt mir auch nicht recht (ich möchte nur 2 oder 3 Nachkommastellen) und ich möchte noch die gesamten Daten in einer Matrix oder zumindest in einzelenen Vektoren stehen haben.
Das Format müsste doch über textscan einstellbar sein?! Und es wäre echt toll wenn vll. jemand noch ein paar Optimierungsvorschläge bezüglich Performance für mich hätte!
Und den Output von textscan als Cell-Array...gibt es da vll. auch eine schönere Lösung?!
Danke schonmal in voraus!
Lg Michael
_________________
-------------------------
Best Regards
Michael Sams
ich habe das schon einmal gemacht und mit Hilfe von "regexp" folgendermaßen gelöst.
Code:
nodes = 1038218; %Anzahl der Knoten
x = zeros(nodes,1);
y = zeros(nodes,1);
z = zeros(nodes,1);
fid_in = fopen(Name.inp','r'); %Öffnen der Datei zum lesen
i = 1; %Laufvariable für Vektor zum speichern der Variablen
ii = 1; %Zeile Datei
iline = fgetl(fid_in);
string1 = 0;
string2 = 0;
m={};
while iline ~= -1
%Name des Parts
find_part = findstr(iline, 'name=test_part');
if ~isempty(find_part)
string1 = 1;
iline = fgetl(fid_in);
end
find_node = findstr(iline, '*Node');
if ~isempty(find_part)
string2 = 1;
iline = fgetl(fid_in);
end
also ich hab es jetzt folgendermaßen gelöst:
Im ersten Schritt schreibe ich mir die Anzahl der Nodes raus und in der zweiten Schleife, lese ich einfach mit sscanf die NODES mit Koordinaten! So geht es relativ flott (ca. 8 sec bei über 100k Knoten)...und ich bin zufrieden! @F: danke für den Tipp, dass man die Knotenanzahl wissen sollte...sonst wäre ich jetzt noch bei einer Rechenzeit von über 1 Min!
Code:
% file-import - Abaqus *.inp file
fid = fopen(inp_file, 'r');
if(fid<0) warndlg('File broken or not available!',...
'File ERROR');
end
-------------------------
Best Regards
Michael Sams
boy
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 10.01.2012, 14:03
Titel:
hallo,
ich habe ein ähnliches problem... ich habe auch ein abaqus input file. allerdings möchte ich nur einen wert auslesen, mit einem referenzwert den ich habe vergleichen und dann optimieren. das bekomme ich auch noch so einigermaßen hin. nun meine frage, kann ich denn den optimierten wert wieder in das input file schreiben, damit ich den optimierten wert weiterverwenden kann? oder muss ich mir dann ein neues input file generieren?
ich wäre dankbar, wenn mir jemand weiterhelfen könnte!
also ich habe es so gelöst, dass ich das Abaqus-File Zeile für Zeile durchlaufe und die unveränderten Zeilen in ein neues File schreibe - bis zum gewünschten Punkt; dort meinen Wert einfüge und dann weiter kopiere bis zum Schluss!
Ob es in Matlab eine Möglichkeit gibt, punktuell ein File zu verändern? ...ich bin mir nicht 100%-ig sicher, aber ich glaube nicht!
lg Michael
_________________
-------------------------
Best Regards
Michael Sams
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.