Verfasst am: 29.11.2019, 09:01
Titel: file öffnen, dessen name in einer variable steckt
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
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 ;)
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;
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.
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 ;)
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
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
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 ;)
oh, das klingt super ... ist irgendwie doof wenn man die ganzen verschiedenen funktionen nicht kennt
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
Code:
for ii = 1 : ja
for i = 1 : (nein/ja)
yy(:,i) = -log10(y_nein(:,ii)/y_ja(:,i));
end 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 ;)
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 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.
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 ;)
oh man, danke dir ... sowas habe ich selbst schon ein paar mal benutzt aber hier kam ich darauf nicht *facepalm*
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.