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

Dateien (*.ttt) in for-Schleife weiterverarbeiten

 

kessix
Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 03.11.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.11.2010, 09:58     Titel: Dateien (*.ttt) in for-Schleife weiterverarbeiten
  Antworten mit Zitat      
Hallo zusammen. Ich habe das Forum durchstöbert, und Ansätze für mein Problem gefunden, jedoch ohne jeglichen Erfolg. Die Tips hier funktionieren für meinen Fall irgendwie alle nicht. Obwohl ich die Gründe dafür nicht verstehe. Vielleicht könnt ihr mir weiter helfen, wenn ich das Problem mal detailiert beschreibe:
Ich habe Messwerte in den Dateien mit der Endung .ttt (lassen sich ganz normal mit dem Editor öffnen) mit Headliner.
Die Inhalte übergebe ich an eine Funktion extinktava, die mir die Daten weiter verarbeitet. Das funktioniert auch alles einwandfrei, alles was ich jetzt zusätzlich will, ist das Aufrufen der einzelnen Dateien in einer Schleife zu automatisieren, damit ich bei 300 Dateien nicht selbst alle "schriftlich" öffnen muss.
Ich stelle mal den Code vor:


function out = extinktava(datei)

[w,b,c,d,t] = textread(datei,'%f;%f;%f;%f;%f','headerlines',7);
ext=-log10(t./100);
energie=1240./w;
out = [energie,ext];


So, und nun der zweite Quelltext:


clear all
close all
a = extinktava('C:\Users\kessix\Documents\Spektroskopie\Ref mit Probe\REFMITPROBE0001.ttt');
.
.
.
z = extinktava('C:\Users\kessix\Documents\Spektroskopie\Ref mit Probe\REFMITPROBE0300.ttt');

plot(a(:,1),a(:,2), ..., z(:,1),z(:,2));


So und nun will ich das ganze schön in eine Schleife verpacken, damit der Code schön übersichtlich bleibt und ich mir stundenlange Schreibarbeit sparen kann. Ich fange gerade erst an mit MatLab zu arbeiten, daher bin ich für jeden Rat bzw. Tip für die Zukunft dankbar!
Ich freue mich auf eure Antworten.
Vielen Dank.
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 03.11.2010, 12:07     Titel: Re: Dateien (*.ttt) in for-Schleife weiterverarbeiten
  Antworten mit Zitat      
Hallo kessix,

Code:

%  clear all  % Ist das wirklich nützlich?!
%  close all  % Ist das wirklich nützlich?!
Folder = 'C:\Users\kessix\Documents\Spektroskopie\Ref mit Probe\';
for i = 1:300
  FileName = sprintf('REFMITPROBE%.4d.ttt', i);
  a = extinktava(fullfile(Folder, FileName));
end
 


Zitat:
Ich habe das Forum durchstöbert, und Ansätze für mein Problem gefunden, jedoch ohne jeglichen Erfolg.

Das Problem ist nicht gerade neu in diesem Forum. Es ist immer eine gute Idee zu zeigen, was Du genau versucht hast und welche Fehlermeldungen order Schwierigkeiten aufgetreten sind. In diesem Forum werden Programme gerne verbessert - das Erstellen von Programmen ist dagegen eher Glückssache.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
kessix
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 03.11.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.11.2010, 14:14     Titel:
  Antworten mit Zitat      
Wow. Das funktioniert ja auf Anhieb! Jetzt habe ich allerdings folgendes Problem. Lasse ich mir die ganzen Grafen in ein Diagramm plotten, sind sie alle einfarbig. jede Datei soll aber ihre eigene Farbe bekommen. Wie kann ich denn sowas machen?

Code:

for i = 1:length(liste)
  FileName = sprintf('Glas1PMS%.4d.ttt', i);
  y{i} = extinktava(fullfile(Folder, FileName));
  plot(y{i}(:,1), y{i}(:,2)); hold on;
end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
kessix
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 03.11.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.11.2010, 12:21     Titel:
  Antworten mit Zitat      
hat keiner eine idee? also mit hold all stellt er die grafen zwar farbig dar, aber die farben wiederholen sich nach x grafen. das ist etwas unpraktisch, da ich sehr viele in einem plot darstellen muss. ein farbverlauf wäre cool, wenn man den in die schleife einbetten könnte.
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 05.11.2010, 13:36     Titel: Re: Dateien (*.ttt) in for-Schleife weiterverarbeiten
  Antworten mit Zitat      
Jan S hat Folgendes geschrieben:


Das Problem ist nicht gerade neu in diesem Forum. Es ist immer eine gute Idee zu zeigen, was Du genau versucht hast und welche Fehlermeldungen order Schwierigkeiten aufgetreten sind. In diesem Forum werden Programme gerne verbessert - das Erstellen von Programmen ist dagegen eher Glückssache.

Gruß, Jan


Für Programme erstellen braucht man auch Zeit, das hat aber nicht jeder.

@kessix
du musst jedem PLOT eigene Farbe mitgeben, z.B zufällige Farbe
sonst muss du dir die Farben selbst definieren.
Code:

figure;
hold on;
for i = 1:length(liste)
  FileName = sprintf('Glas1PMS%.4d.ttt', i);
  y{i} = extinktava(fullfile(Folder, FileName));
  plot(y{i}(:,1), y{i}(:,2), 'Color',rand(1,3));
end
hold off
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 05.11.2010, 23:46     Titel:
  Antworten mit Zitat      
Hallo kessix,

Wenn Du verschiedene Farben wünschst, musst Du das Matlab mitteilen. Entweder indem Du die ColorOrder des AXES-Objekts entsprechend groß setzt, oder indem Du die Farben explizit setzt:
Code:

AxesH = axes('NextPlot', 'add');
CMap = jet(200);
for i = 1:200
   line(1:50, rand(1, 50)+i*0.1, 'Color', CMap(i, :));
end
 

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
kessix
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 03.11.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.11.2010, 10:13     Titel:
  Antworten mit Zitat      
Ich hab es jetzt so versucht:

AxesH = axes('NextPlot', 'add');
CMap = jet(length(liste));

hold all;
for i = 1:length(liste)
FileName = sprintf('Glas1PMS%.4d.ttt', i);
y{i} = extinktava(fullfile(Folder, FileName));
plot(y{i}(:,1), y{i}(:,2), 'Color', rand(1,50)+i*0.1, 'Color', CMap(i, :) );
end
hold off;


jetzt hab ich allerdings das problem dass er mir nur das koordinatensystem ohne plots zeigt. aber er spuckt die fehler aus:

??? Error using ==> plot
Color value must be a 3 element numeric vector

Error in ==> Glas1 at 15
plot(y{i}(:,1), y{i}(:,2), 'Color', rand(1,50)+i*0.1, 'Color', CMap(i, :) );


wenn ich nun den plot in der schleife änder zu
plot(y{i}(:,1), y{i}(:,2), 'Color', rand(1,3)+i*0.1, 'Color', CMap(i, :) ); kommt folgende fehlermeldung:

??? Error using ==> plot
Color value contains NaN, or element out of range 0.0 <= value <= 1.0

Error in ==> Glas1 at 15
plot(y{i}(:,1), y{i}(:,2), 'Color', rand(1,3)+i*0.1, 'Color', CMap(i, :) );


änder ich die plot-zeile zu
plot(y{i}(:,1), y{i}(:,2), 'Color', rand(1,3)+i*0.1 );
spuckt er mir willkürlich 2 bis 3 verschiedene farbliche plots von 28 [length(liste)] aus. das heißt viiiel zu wenige. rekord war 4 sichtbare grafen, minimum null. änder ich rand(1,3) auf rand(1,50), sehe ich immer null.

wieso funktioniert das denn nicht so? jemand eine idee? ich verstehe sicherlich etwas grundsätzliches falsch, kann das sein?
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 08.11.2010, 16:07     Titel:
  Antworten mit Zitat      
Hallo kessix,

Color-Vektoren haben die Größe [1 x 3] und Werte zwischen 0 und 1 inklusive. Ein valider Color-Vektor ist z.B.:
Code:


Aber "rand(1,3)+i*0.1" geht mit einer gewissen Wahrscheinlichkeit über 1 hinaus. Es ist auch nicht sehr sinnvoll, zu einer Zufallszahl eine feste Zahl zu addieren. Welches Ergebnis erwartest Du?

Ich hatte in meinem Beispiel "JET" benutzt, um eine ColorMap zu erstellen. Schau es Dir doch nochmal genau an.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
kessix
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 03.11.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.11.2010, 17:26     Titel:
  Antworten mit Zitat      
aber dein bsp kann ich irgendwie nicht in meinen code implementieren... was macht der befehl line();? ich brauch plot(); wie kann ich das denn ineinander verwurschteln?
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 09.11.2010, 00:31     Titel:
  Antworten mit Zitat      
Hallo kessix,

Zitat:
was macht der befehl line();?

Siehe: "help line".

Zitat:
ich brauch plot();

PLOT zeichnet ganz genau wie LINE eine Linie. Nur der Typ des zurückgelieferten Handles ist unterschiedlich.

Dein Problem hat aber gar nichts mit LINE oder PLOT zu tun, sondern Du versucht eine Farbe zu definieren, verwendest dafür aber kein [1 x 3] Vektor mit Werten zwischen 0 und 1.

Deine Code-Zeile enthält zwei 'Color'-Spezifikationen:
Code:
plot(y{i}(:,1), y{i}(:,2), 'Color', rand(1,50)+i*0.1, 'Color', CMap(i, :) );

Die erste, nämlich "rand(1, 50)+i*0.1" ist nachwievor falsch. "rand(1, 50)+i*0.1" ist ein [1 x 50] Vektor mit Zahlen zwischen 0.1 und 1.1.
Die Fehlermeldung, die Du gepostet hast, ist dabei ganz exakt und hilfreich:
Zitat:
??? Error using ==> plot
Color value must be a 3 element numeric vector

Hast Du diese Meldung verstanden?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
kessix
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 03.11.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.11.2010, 09:22     Titel:
  Antworten mit Zitat      
ich habe die problematik durchaus verstanden, weiß aber nicht wie ich nun das problem lösen kann. zB wäre folgendes toll:
ich definiere eine farbe (zB rot) und die grafen im selben plot variieren die helligkeit bzw sättigung in rot. so dass alle rot, aber dennoch voneinander erkennbar sind.
das ist eigentlich genau das was ich mit plus i erreichen wollte. ich verstehe nun aber das es keinen sinn macht, wenn man mit random arbeitet, habe ich vorher nicht drüber nachgedacht.
btw:
gibt es einen befehl mit dem man eine char-zeichenkette in einen string umwandeln kann? zB einen dateinamen...

kessix
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 09.11.2010, 11:36     Titel:
  Antworten mit Zitat      
Hallo kessix,

Zitat:
ich definiere eine farbe (zB rot) und die grafen im selben plot variieren die helligkeit bzw sättigung in rot. so dass alle rot, aber dennoch voneinander erkennbar sind.

Das Augen eines Menschen ohne Rot/Grün-Blindheit kann bei Linien mit einem Pixel Breite etwa 5 bis 8 Rot-Töne sicher unterscheiden, wenn sie nahe bei einander liegen. Der Rot-Kanal der [1 x 3] Vektoren ist das erste Element. Man kann also entweder manuell ein paar Rot-Töne definieren:
Code:
RedMap = [1, 0, 0;  0.8, 0, 0, 0.6, 0, 0, 1, 0.2, 0.2];

Das müsstest Du dann von Hand an die Darstellung Deines Monitors anpassen.
Etwas automatischer geht das noch im HSV-Farbmodell, siehe "help rgb2hsv".

Zitat:
gibt es einen befehl mit dem man eine char-zeichenkette in einen string umwandeln kann? zB einen dateinamen...

CHAR-Zeichenketten sind Strings. Eine Umwandlung ist demnach nicht nötig, aber auch nicht möglich.
Siehe "help strings".

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
kessix
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 03.11.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.11.2010, 16:50     Titel:
  Antworten mit Zitat      
hmm, ok.
warum geht dann aber folgendes nicht:

Code:

liste = dir('C:\Users\kessix\Documents\Spektroskopie\PDMS auf Glas\Glas 1\*.ttt');
Folder = 'C:\Users\kessix\Documents\Spektroskopie\PDMS auf Glas\Glas 1\';
names = {liste.name};

hold all;
for i = 1:length(liste)
  y{i} = extinktava(names{i});
  plot(y{i}(:,1), y{i}(:,2), 'Color', rand(1,3));
end
hold off;


function out = extinktava(p)


[w,b,c,d,t] = textread(p,'%f;%f;%f;%f;%f','headerlines',7);

ext=-log10(t./100);
energie=1240./w;

out=[energie,ext];
 


names{i} kann scheinbar nicht an eine funktion übergeben werden, obwohl dort doch nur der name der datei drin steht.... das muss doch irgendwie machbar sein.
fehlermeldung:

??? Error using ==> textread at 167
File not found.

Error in ==> extinktava at 3
[w1,b1,c1,d1,t1] = textread(p1,'%f;%f;%f;%f;%f','headerlines',7);

Error in ==> Glas1test at 13
y{i} = extinktava(names{i});





mir wurde das hier vorgeschlagen, und es funktioniert auch:

Code:

hold all;
for i = 1:35  
  FileName = sprintf('C:\Users\kessix\Documents\Spektroskopie\SiOSubstrat\SiOSubstrat 8_11_2010\Ref1\SIO2SUBSTRAT8_11_1%.4d.ttt', i);

  y{i} = extinktava(fullfile(Folder, FileName));
  plot(y{i}(:,1), y{i}(:,2), 'Color', rand(1,3));
 
end
hold off;
 


was mich hieran aber bedeutend stört ist, dass er das mit i chronologisch abarbeitet... wenn ich in dem ordner aber zB die dritte datei, also mit endung ....0003.ttt lösche weil ich sie nicht gebrauchen kann, funktioniert der ganze spaß schon nicht mehr.

edit by denny: Bitte die Code-Umgebung verwenden. Danke!
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 09.11.2010, 18:42     Titel:
  Antworten mit Zitat      
Zitat:
names{i} kann scheinbar nicht an eine funktion übergeben werden, obwohl dort doch nur der name der datei drin steht.... das muss doch irgendwie machbar sein.
fehlermeldung:

??? Error using ==> textread at 167
File not found.

Error in ==> extinktava at 3
[w1,b1,c1,d1,t1] = textread(p1,'%f;%f;%f;%f;%f','headerlines',7);

Error in ==> Glas1test at 13
y{i} = extinktava(names{i});


Weil du vielleicht den ganzen Pfad mit übergeben muss, unten wird ja kompletter Pfad übergeben


Code:

liste = dir('C:\Users\kessix\Documents\Spektroskopie\PDMS auf Glas\Glas 1\*.ttt');
Folder = 'C:\Users\kessix\Documents\Spektroskopie\PDMS auf Glas\Glas 1\';
names = {liste.name};

hold all;
for i = 1:length(liste)
  y{i} = extinktava(fullfile(Folder,names{i}));
  plot(y{i}(:,1), y{i}(:,2), 'Color', rand(1,3));
end
hold off;


function out = extinktava(p)


[w,b,c,d,t] = textread(p,'%f;%f;%f;%f;%f','headerlines',7);

ext=-log10(t./100);
energie=1240./w;

out=[energie,ext];
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 09.11.2010, 21:13     Titel:
  Antworten mit Zitat      
Hallo kessix,

Denny's Antwort ist ja bereits hinreichend.

Noch ein Tip:
Zitat:
names{i} kann scheinbar nicht an eine funktion übergeben werden, obwohl dort doch nur der name der datei drin steht....
fehlermeldung:

??? Error using ==> textread at 167
File not found.

Die Fehlermeldung ist eindeutig und bedeutet, dass das Problem nichts mit Strings zu tun hat, sondern das die angeforderte Datei schlicht nicht existiert. Das liegt daran, dass in der Antwort von DIR nur die Datei-Namen enthält, nicht aber den Pfad.

Die Fehlermeldungen von Matlab sind die besten und hilfreichsten, die ich je gesehen habe. Man sollte sie also genau beachten.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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 - 2024 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.