WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Probleme beim Datei einlesen

 

Schibbie
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 28.11.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.11.2012, 13:46     Titel: Probleme beim Datei einlesen
  Antworten mit Zitat      
Hallo,

ich möchte mit einem Programm einen bestimmten Teil einer Datei verändern und alles dann in einer neuen Datei speichern. Es handelt sich un ein .2dm file in dem im Header etwas steht, danach im oberen Teil die verknüpften Knoten (gemischt 6(E3T) oder 7(E4Q) Werte), im mittleren Teil die Koordinaten der einzelnen Knoten (ND) und im letzten Teil irgendetwas steht.

Beispiel:

MESH2D
E3T 1 52 49 81 1
E4Q 2 62 90 87 89 1
E3T 3 5 99 4 1
ND 1 2.28000000e+001 1.00000000e-002 5.60000002e-001
ND 2 2.28000000e+001 0.00000000e+000 0.00000000e+000
ND 3 2.33000000e+001 1.00000000e-002 5.60000002e-001
Bla 04 53
btewrztkezr


Ich muss jetzt die ND Koordinaten um eine Achse drehen, dies gelingt mir auch schon mit einer Funktion und ich kann diese auch schon mit fprintf in eine Datei schreiben.
Mein Problem besteht jetzt darin, dass der alles oberhalb von ND und unterhalb von ND nicht verändert werden muss und ich es einfach einlesen kann und dann in die neue Datei oberhalb und unterhalb schreiben möchte. Kann mir da jemand weiterhelfen? Da die Teile ober und unterhalb verschiedene Strukturen aufweisen, (mal 2, mal 3, mal 7 "Elemente") habe ich Probleme diese in eine Matrix zu schreiben. Die Anzahl der Zeilen oberhalb von ND und die Anzahl der ND-Zeilen habe ich gegeben.

Ich hoffe ich habe euch damit nicht erschlagen und jemand kann mir weiterhelfen.

Vielen Dank

Schibbie
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.11.2012, 13:56     Titel:
  Antworten mit Zitat      
Hallo,

du kannst die kompletten Zeilen mit
Code:
zeile = fgetl(fid);
einlesen und mit
Code:
fprintf(fid, '%s\n', zeile);
wieder herausschreiben.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Schibbie
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 28.11.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.11.2012, 14:58     Titel:
  Antworten mit Zitat      
Danke für deine schnelle Antwort, mit einer Schleife funktioniert das für den oberen Teil genau so wie ich es möchte! Bin noch Anfänger daher läuft das ganze auch noch etwas holprig. Ich poste den code mal, damit andere das finden können:

Code:
fid = fopen('NDxyz.2dm','w+','n');  % open new file, writeable

fid2 = fopen(fileName);      % open old file
for i = 1:headerNum          
Top = fgetl(fid2);         % reads header + E3T + E4Q
fprintf(fid, '%s\n', Top);      % writes header + E3T + E4Q
end
fclose(fid2);



Bei dem unteren Teil habe ich noch ein Problem mit der Schleife und zwar zählt die Variable Rest_begin alles was vor dem Rest steht, also bis einschließlich letztes ND. Was danach kommt ist mal länger, mal kürzer. Nur steigt die Schleife wohl immer am Anfang der Datei ein. Wie krieg ich die Schleife dazu erst ab Rest_begin zu arbeiten? Das ENDE hab ich jetzt nur mal so reingeschrieben. In meiner vorhandenen Datei ist der untere Teil 17 Zeilen lang und die Variable ENDE für eine beliebige Datei müsste ich dann noch zählen lassen...


Code:
fid2 = fopen(fileName);
for i = Rest_begin : ENDE          % writes Rest
Bottom = fgetl(fid2);
fprintf(fid, '%s\n', Bottom);    
end
fclose(fid2);



Wobei das kann ich auch mit einer while schleife machen mit feof. Mein Problem ist eben wie ich bei Rest_begin mit der Schleife einsteige
Private Nachricht senden Benutzer-Profile anzeigen
 
Schibbie
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 28.11.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.11.2012, 15:33     Titel:
  Antworten mit Zitat      
Ich habs hin gekriegt Smile

Code:
fid3 = fopen(fileName);
for i=1:Rest_begin             % skip the lines till rest_begin
    fgetl(fid3);
end
while  ~feof(fid3)              % read all till end of file
Bottom = fgetl(fid3);
fprintf(fid, '%s\n', Bottom);    % write in new file
end
fclose(fid3);
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.