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

file öffnen, dessen name in einer variable steckt

 

lovobo
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 50
Anmeldedatum: 26.07.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.11.2019, 10:01     Titel: file öffnen, dessen name in einer variable steckt
  Antworten mit Zitat      
hallo, ich habe schon etwas im forum und generell geguckt und bisher hab ich noch nicht das richtige gefunden oder ich raff es nicht xD

der dateiname liegt in var. die datei besteht hat die dimensionen 2000,2. ich möchte jedoch nur die gesamte erste spalte haben. ich weiß grad nicht wie ich die datei aufrufen kann mit hilfe des namens der in var steckt und dann dort die erste spalte. ich möchte das so machen, da ich eine schleife habe mit verschiedenen filenamen, welche vorher eingelesen wurden und die sin alle in einer anderen variable drin. von den ganzen files bruache ich in der schleife nur die erst spalte

Code:
ref     = importdata('test2_ref.asc');
wasser1 = importdata('test2_wasser.asc');
wasser2 = importdata('test2_wasser2.asc');
s_oel   = importdata('test2.asc');

variablesInCurrentWorkspace = who;
numVariables = length(variablesInCurrentWorkspace);
[zeilen,spalten] = size(ref);
data_compare = zeros(zeilen,numVariables);


for i = 1:numVariables
    var=variablesInCurrentWorkspace(i)
    data_compare(:,1) = var(:,1)
end


das war mein naiver erster versuch, bei dem ich auch übersah das es eine cell ist xD
Private Nachricht senden Benutzer-Profile anzeigen


lovobo
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 50
Anmeldedatum: 26.07.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.12.2019, 09:40     Titel:
  Antworten mit Zitat      
hmm keiner ? Sad
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 02.12.2019, 09:53     Titel:
  Antworten mit Zitat      
Hallo,

ich verstehe die Problemstellung nicht. Mein Eindruck ist, dass hier Dateinamen und Variablen durcheinander geraten.

Wenn ich das richtig sehe, läuft das auf dynamische Variablennamen hinaus. Das ist zwar generell mit eval möglich, aber schwer nachvollziehbar und zu debuggen und daher keine gute Idee.
Besser ist es, die Daten in einem Struct abzulegen und dann über die fieldnames zu iterieren.

Zitat:
das war mein naiver erster versuch, bei dem ich auch übersah das es eine cell ist xD

Dass was eine Cell ist? Vermutlich hast du dann ja auch einen zweiten Versuch gemacht? Wenn ja, poste ihn doch bitte.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
lovobo
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 50
Anmeldedatum: 26.07.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.12.2019, 15:16     Titel:
  Antworten mit Zitat      
oh, vielen dank Harald für deine Antwort, hatte da nicht mehr so ganz mit gerechnet. Ich fand hier im forum jedoch schon eine lösung, welche aber entweder fehlerhaft ist, oder aufgrund des alters nicht mehr funktioniert, da habe ich keine ahnung.

wie auch immer, daraufhin habe ich dann eine lösung auf mich zugeschnitten und auch auf anderem wege, ich denke aber das die lösung nicht sonderlich elegant ist xD

Code:
clc;clear all;close all;
% Change the current folder to the folder of this m-file.
if(~isdeployed)
  cd(fileparts(which(mfilename)));
end
directory = dir; directory = directory(3:end);
directory_data = struct2cell(directory);
filenames_temp = directory_data(1,:); filenames_temp = filenames_temp';
strf = strfind(filenames_temp,'asc');


%% zuschneiden der von strf, das nur zellen mit inhalt vorhanden sind
% ff als neue cell anlegen, damit nur diese files geladen werden

empty = cellfun('isempty',strf);
n = 1;
for i = 1 : length(strf)-1;
    if empty(i) == 1;
    else
        filenames(n) = filenames_temp(i);
        n = n + 1;
    end
end


%% einlesen der daten mittels der gefilterten dateinamen
%dataset=dlmread(char(filenames(1)));
n = 1;

for i = 1 : length(filenames)
    dataset = dlmread(char(filenames(i)));
   
    if i == 1
            wavelength(:,i) = dataset(:,1);
            data(:,i) = dataset(:,2);
    end
   
    if length(dataset) == length(wavelength)
            wavelength(:,i) = dataset(:,1);
            data(:,i) = dataset(:,2);
    else
        wavelength2(:,n) = dataset(:,1);
        data2(:,n) = dataset(:,2);
        n = n + 1;
    end
end


wavelength hat später eine andere längere, daher auch wavelength2. das ganze funktioniert bei meiner ausgangslage problemlos. hat mich aber einige stunden geskostet das so hinzubekommen.

im moment gucke ich, wie ich die länge von wavelength auf die von wavelength2 anpassen kann.

grüße Very Happy
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

die erste Hälfte sollte sich ersetzen lassen durch:

Code:
list = dir('*.asc');
filenames = {list.name};



Zitat:
wie ich die länge von wavelength auf die von wavelength2 anpassen kann.

Wenn du sagen kannst, wie du das machen willst (abschneiden, interpolieren, ganz anders?), kann man dir dabei helfen, das umzusetzen.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
lovobo
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 50
Anmeldedatum: 26.07.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.12.2019, 11:40     Titel:
  Antworten mit Zitat      
hehe, das mit wavelength's anpassen habe ich schon getan, habs interpoliert^^

deinen hinweis, den ersten teil abzukürzen finde ich sehr toll, danke dir.

muss dadurch wazr nun einiges umschreiben, da ich meine methode bei einigen weiteren sachen verdenet habe, aber dadurch siehts nun auch besser aus und nicht mehr dieser apperat xD

vielen dank für deine schnellen antworten und deine generelle hilfsbereitschaft Smile

edit: eine frage kam mir dann doch noch.
nun habe ich in filenames die namen der files, diese möchte ich jedoch noch weiter unteilen anhand weiterer zeichensätze z.B. ob dort das wort absorption vorkommt oder nicht und dann jene einträge in denen es vorkommt in die eine file schreiben und jene in denen es nicht vorkommt in eine andere schreiben.

derzeit mache ich das recht umständlich

Code:
for i = 1 : length(strf)
    if empty(i) == 1;
        plot_names_nein(n,1) = plot_names(i);
        n = n + 1;
    else
        plot_names_ja(m,1) = plot_names(i);
        m = m + 1;
    end
end
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 06.12.2019, 12:05     Titel:
  Antworten mit Zitat      
Hallo,

du kannst z.B. zwei Listen machen:
Code:
list = dir('*.asc');
filenames = {list.name};

list = dir('*absorption*.asc');
filenames_with_absorption = {list.name};
filenames_without_absorption = setdiff(filenames, filenames_with_absorption)
 


Alternativ eine Abfrage wie
Code:
if contains(filenames{k}, 'absorption')


Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
lovobo
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 50
Anmeldedatum: 26.07.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.12.2019, 13:49     Titel:
  Antworten mit Zitat      
oh, das klingt super ... ist irgendwie doof wenn man die ganzen verschiedenen funktionen nicht kennt Sad

jetzt komme ich grade bei etwas nicht weiter
nein hat die zahl 4
ja hat die zahl 2
die matrizen y_ja und y_nein haben die jeweilige spaltenanzahl
ich weiß grade nicht wie ich es schreiben soll, das die matrize yy gefüllt wird beginnend bei 1 bis 4. bin schon ein paar sachen durchgegangen, aber entweder besetze ich eine spalte doppelt, oder habe eine null-spalte, weil ich diese überspringe ... vll is auch einfach nur freitag und die gedanken schon ganz woanders.

deine vereinfachungen werde ich definitiv einbauen Smile

Code:
   for ii = 1 : ja
        for i = 1 : (nein/ja)
            yy(:,i) = -log10(y_nein(:,ii)/y_ja(:,i));
        end
    end
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 06.12.2019, 14:03     Titel:
  Antworten mit Zitat      
Hallo,

mir ist nicht ganz klar, was du erreichen möchtest. Vielleicht:
Code:
for ii = 1 : ja
i = 2*ii;
            yy(:,ii) = -log10(y_nein(:,ii)./y_ja(:,i)); % der . ist wichtig
    end


Wenn eine Frage nicht direkt mit dem Thema zu tun hat, bitte generell lieber ein neues Thema aufmachen.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
lovobo
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 50
Anmeldedatum: 26.07.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.12.2019, 09:33     Titel:
  Antworten mit Zitat      
hmm, also alles hier ist ein und das selbe projekt.
die ausgangslage ist ein spektrometer, der mir messungen also .asc dateien ablegt welche wie man erahnen kann im ascii format sind.

ich benenne die als beispiel wie folgt:
500_1600_10v_count_ingaas_wasser.asc
500_1600 = messbereich im nm-bereich
10v = spannung der leuchtquelle
count = art der messung
ingaas = detektor

anhand derer wollte ich dann filtern können wenn ich eine große anzahl an messungen habe, sei es durch auswahl (ich möchte nur messungen von 10v) oder ausschluss (aber keine von wasser).

da counts die anzahl der photonen sind und im bereich von 10000 bis 40000 liegen, spalte ich die von den restlichen messungen ab, welche meist absorption sind und von 0 bis 100% liegen.

mein ziel ist am ende ist,aufgrund der gefilterten daten dann automatisch plots erstellen zu können, um diverse ergebnisse miteinander vergleichen zu können.

das letzte problem ergibt sich daraus, das ich auch immer eine referenz messung habe, für den plot habe ich die messung durch referenz. bei mehreren messungen ergibt sich daraus ein muster. erst die referenz, dann die messungen, neue referenz und wieder gleiche anzahl an messungen wie vorher. mit der for-schleife will ich das dann wieder zusammenbauen.

ich weiß jetzt nicht, soll ich daraus dann ein neues thema erstellen ? ich kann das nicht beurteilen.

und ja ... es war freitag, natürlich elementweise *facepalm* danke Smile hast mir schon mal ein paar minuten erspart.

edit: die for-schleife soll dann nur die messwerte zusammenbauen. in meinem fall wären das 4 vektoren die zu einer matrix zusammengesetzt werden sollen. generell soll das aber genauso funktionieren wenn ich 4 referenzen habe, mit jeweils 10 messwerten, dann wäre das am ende eine matrix mit den 40 zusammengesetzten vektoren.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 09.12.2019, 18:49     Titel:
  Antworten mit Zitat      
Hallo,

wenn du alle Kombinationen berechnen willst, brauchst du zwei geschachtelte Schleifen und einen Zähler, der die Spaltennummer hochzählt.

Code:
k = 1;
for ii = 1 : ja
        for i = 1 : (nein/ja)
            yy(:,k) = -log10(y_nein(:,ii)/y_ja(:,i));
        end
        k = k + 1;
    end


Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
lovobo
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 50
Anmeldedatum: 26.07.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.12.2019, 09:50     Titel:
  Antworten mit Zitat      
oh man, danke dir ... sowas habe ich selbst schon ein paar mal benutzt aber hier kam ich darauf nicht *facepalm*
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 - 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.