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

Zeilenvektoren einer for-Schleife untereinander in .txt schr

 

Auster23
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 11.06.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.07.2011, 09:35     Titel: Zeilenvektoren einer for-Schleife untereinander in .txt schr
  Antworten mit Zitat      
Hallo zusammen,

Ich habe noch wenig Erfahrung mit Matlab.
Ich habe eine komplizierte Funktion, in der ich nicht mit Vektoren arbeiten kann. Ist aber nicht so schlimm. Ich nehm ne for-Schleife.

Ich erhalte pro Schleifendurchlauf einen 1x6 Zeilenvektor M.

M=(... ... ... ... ... ...)
Ich möchte nun diese Vektoren M in ein Textfile .txt untereinanderschreiben.

also:
M=(... ... ... ... ... ...)
M=(... ... ... ... ... ...)
M=(... ... ... ... ... ...)
M=(... ... ... ... ... ...)
M=(... ... ... ... ... ...)
M=(... ... ... ... ... ...)
...
ohne das ständig der Wert für M überschrieben wird. Wie kann ich das machen? Das muss ja irgendwie mit fprintf gehen.

Viele Grüße,
Auster
Private Nachricht senden Benutzer-Profile anzeigen


_Peter_
Moderator

Moderator


Beiträge: 537
Anmeldedatum: 08.12.10
Wohnort: ---
Version: 7.10, 2010a
     Beitrag Verfasst am: 05.07.2011, 10:02     Titel:
  Antworten mit Zitat      
Hallo Auster23,
was hast du denn schon versucht? Mit fprintf geht das.
In der Hilfe findest du einige Beispiele wie man ein textfile beschreiben kann.
(http://www.mathworks.com/help/techdoc/ref/fprintf.html)

Hast du dir das schonmal angeschaut? Was hat da nicht geklappt? Was hast du versucht?Welche Fehlermeldungen gab es?

Oder liegt das Problem darin, dass du das nicht untereinander schreibst? Dazu müsstest du noch ein '\n' am Zeilenende immer einfügen.
_________________

Gruß
Peter
_________________
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht? Oder der MATLAB Hilfe?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.07.2011, 10:14     Titel:
  Antworten mit Zitat      
Hallo Peter,

mein Problem ist, dass ich den Vektor in M stehen habe. Mein Code sieht so aus:

Code:

for b=1:607
w=Ag(b,1);   % Wellenlänge
x=2*3.141592654*d*1.55./w;

N=Ag(b,2);    % Brechungsindex (Realteil)
k=Ag(b,4);    % Brechungsindex (Imaginärteil)
m=N+i.*k;
M=[w  mie(m,x)]   % 1x6 Matrix kann in Kommandozeile ausgegeben werden, Q_ext, Q_sca, Q_abs
fid = fopen('Ag.resultat.txt', 'wt');
fprintf(fid,%d,\n,M);
fclose(fid);


end
 


Viele Grüße,
Auster
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.07.2011, 10:29     Titel:
  Antworten mit Zitat      
Ich erhalte folgende Fehlermeldung:

???fprintf(fid,%d,'M \n');
Error: Expression or statement ist incorrect--possibly unbalanced (, {, or (.
wenn ich fprintf(fid,%d,'M \n'); eingebe

die gleiche Meldung beim vorherigen Code

Gruß,
Auster
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.07.2011, 10:32     Titel:
  Antworten mit Zitat      
hab das %d entfernt, jetzt gehts

es steht dann allerdings im txt-File nur ein M. Sad
 
Auster23
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 11.06.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.07.2011, 10:45     Titel:
  Antworten mit Zitat      
neuer Code:
Code:

Pd=dlmread('Pd.index.interpol10000.txt');
Ag=dlmread('Ag.index.interpol10000.txt');
Au=dlmread('Au.index.interpol10000.txt');
index=1;
d=50;
for b=1:607
w=Ag(b,1);   % Wellenlänge
x=2*3.141592654*d*1.55./w;

N=Ag(b,2);    % Brechungsindex (Realteil)
k=Ag(b,4);    % Brechungsindex (Imaginärteil)
m=N+i.*k;
M=[w  mie(m,x)]   % 1x6 Matrix kann in Kommandozeile ausgegeben werden, Q_ext, Q_sca, Q_abs
fid = fopen('Ag.resultat.txt', 'wt');
fprintf(fid, '\n', M);
fclose(fid);
end
 


Fehlermeldung:
??? Error using ==> fprintf
Invalid file identifier. Use fopen to generate a valid file identifier.

Kannst du mir helfen?

Gruß,
Auster
Private Nachricht senden Benutzer-Profile anzeigen
 
_Peter_
Moderator

Moderator


Beiträge: 537
Anmeldedatum: 08.12.10
Wohnort: ---
Version: 7.10, 2010a
     Beitrag Verfasst am: 05.07.2011, 14:10     Titel:
  Antworten mit Zitat      
Auf den ersten Blick würde ich sagen, es liegt daran, dass du jedesmal in der Schleife die Datei öffnest und wieder schließt. Somit weiß er nicht in welcher Zeile er ist und fängt immer von vorne an. Also müsste nur das letzte auftauchen.

Du müsstest das so aufbauen:
Code:

fid = fopen(...);
for...
  fprintf(fid,...);
end
fclose(fid,...);
 


Weiterhin musst du deine fpintf Anweisung noch anpassen.
Kleines Beispiel:
Code:

fid = fopen('Schreiben.txt', 'wt');
for i = 1: 10
  M = [1 i];
  fprintf(fid, 'Erste Zahl: %d und zweite Zahl: %d\n', M);
end
fclose(fid);
 

_________________

Gruß
Peter
_________________
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht? Oder der MATLAB Hilfe?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
Auster23
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 11.06.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.07.2011, 19:04     Titel:
  Antworten mit Zitat      
Hallo,

erstmal vielen Dank für deine schnellen Antworten.

Ich habe den folgenden Code eingegeben, da sich auch w je Schleifendurchlauf ändert:
Code:

fid = fopen('Ag.resultat.txt', 'wt');

Pd=dlmread('Pd.index.interpol10000.txt');
Ag=dlmread('Ag.index.interpol10000.txt');
Au=dlmread('Au.index.interpol10000.txt');
index=1;
d=50;
for b=1:607
w=Ag(b,1);   % Wellenlänge
x=2*3.141592654*d*1.55/w;

N=Ag(b,2);    % Brechungsindex (Realteil)
k=Ag(b,4);    % Brechungsindex (Imaginärteil)
m=N+i.*k;
M=[w  mie(m,x)] ;  % 1x6 Matrix kann in Kommandozeile ausgegeben werden, Q_ext, Q_sca, Q_abs
fprintf(fid, '%d\n %d\n', M);
fclose(fid);
end
??? Error using ==> fprintf
Invalid file identifier.  Use fopen to generate a valid file identifier.
 


Die Fehlermeldung ist geblieben. Ich finde es seltsam, das das so schwierig ist. Dieses Problem müsste doch eigentlich vielen Anwenderin in Matlab begegnen.

In dem txt.file steht der erste Zeilenvektor M als Spaltenvektor. D.h. während dem 2. Durchlauf wurde abgebrochen, obwohl ich die Ergebnisse des 2. Durchlaufs noch in der Kommandozeile sehen kann.

Fällt dir irgendwas ein?

Viele Grüße,
Auster
Private Nachricht senden Benutzer-Profile anzeigen
 
_Peter_
Moderator

Moderator


Beiträge: 537
Anmeldedatum: 08.12.10
Wohnort: ---
Version: 7.10, 2010a
     Beitrag Verfasst am: 07.07.2011, 13:25     Titel:
  Antworten mit Zitat      
Hallo Auster,
Auster23 hat Folgendes geschrieben:

...
Code:

fid = fopen('Ag.resultat.txt', 'wt');

for b=1:607
...
fprintf(fid, '%d\n %d\n', M);
fclose(fid);
end
??? Error using ==> fprintf
Invalid file identifier.  Use fopen to generate a valid file identifier.
 


Die Fehlermeldung ist geblieben...
Fällt dir irgendwas ein?
...

Die Fehlermeldung ist geblieben, weil du die Struktur nicht meinem Beispiel angepasst hast. Wink
Dein Vorgehen:
1. Öffnen der Datei -> fid verweist auf die Datei
2. Beginn der Schleife
3. Schrieben in Datei -> fid verweist auf die Datei
4. Schließen der Datei -> fid verweist nichtmehr auf die Datei
5. Ende der Schleife.

Das heißt, dass du im zweiten Durchlauf kein Verweis auf die Datei mehr hast und somit ist der file identifier ungültig.

Wie gesagt: Öffnen(fopen) und Schließen (fclose) der Datei ausserhalb(!) der Schleife.

Weiterhin:
Auster23 hat Folgendes geschrieben:
In dem txt.file steht der erste Zeilenvektor M als Spaltenvektor.
ist das so gewollt der Spaltenvektor? Laut deinem ersten Post willst du einen Zeilenvektor. Dann müsstest du das so schreiben:
Code:

fprintf(fid, '%d %d\n', M);
 

_________________

Gruß
Peter
_________________
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht? Oder der MATLAB Hilfe?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
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.