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

Funktion mit variabler Anzahl an optionalen Argumenten

 

Eldrad Ulthran
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 20.02.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.02.2018, 17:01     Titel: Funktion mit variabler Anzahl an optionalen Argumenten
  Antworten mit Zitat      
Guten Tag,

ich schreibe momentan an einer Funktion, die meine Rohdaten verarbeiten soll, die in separaten Dateien gespeichert sind. Es soll ein verpflichtendes Argument geben, nämlich den Pfad zur Referenzdatei. Danach sollen beliebig viele Dateinamen der Rohdaten (typischerweise 1-20, 0 soll aber für Testzwecke auch erlaubt sein) angegeben werden. Für den Fall, dass die Referenzdaten von schlechter Qualität sind, möchte ich einen Switch "bad" einbauen.
Die Inhalte der Dateien sollen danach geladen und bearbeitet werden, was jedoch nicht mein Problem ist. Ich kriege es momentan nicht hin, die variable Anzahl der optionalen Argumente zu implementieren. Mithilfe des InputParsers kann ich die Pflichtangabe der Referenzdatei sowie den Switch abfangen:

Code:
function Raman_Calibrate_Auto (varargin)
p = inputParser();

% Das erste Argument muss zwingend der Pfad zum Neon-Spektrum sein. Es wird geprüft, ob im Dateinamen "Ne_" vorhanden ist
% und ob die Datei überhaupt exisitert.
val_Ne = @(x) any(strfind(x, "Ne_")) == 1 && exist(x, "file") == 2;
p.addRequired ("Ne_filename", val_Ne);

% Für den Fall, dass die Referenz zu stark verrauscht ist, kann optional "bad" mit angegeben werden, was die nachfolgende
% Auswerteroutine verändert.
p.addSwitch ("bad");

p.parse (varargin{:});


Um die variable Anzahl an weiteren angegebenen Dateien abzufangen, habe ich zunächst p.KeepUnmatched = "true" versucht, was jedoch nur Murks produziert, weil es Parameter=Value - Paare erzeugt und den Switch verschluckt, sodass dann auch "Dateipfad" = "bad" entstehen kann. Mein nächster Ansatz war folgender, der jedoch nicht funktioniert – Octave sagt dabei "error: 'method' undefined"

Code:
Spectrum_filename = cell(length(varargin),1);
val_Spec = @(x) any(strfind(x, "Ne_")) == 0 && exist(x, "file") == 2;

for i = 1:length(varargin)
p.addOptional (Spectrum_filename{i}, val_Spec);
end


An dieser Stelle sind mir die Ideen ausgegangen. Hat vielleicht einer von euch einen cleveren Einfall hierzu?
Private Nachricht senden Benutzer-Profile anzeigen


AndyydnA

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.02.2018, 19:12     Titel:
  Antworten mit Zitat      
Hi Eldrad,
auch wenn carandraug mit dem inputParser schön gezeigt hat, was mit classdef möglich ist, würde ich an deiner Stelle hier darauf verzichten.

Ich würde den Dateinamen für die Referenz, ggf. mit "bad" flag als struct übergeben und die Dateien mit Rohdaten einfach per cell array. Wenn ich dirch richtig verstanden habe willst du doch

Code:
function Raman_Calibrate_Auto (ref_filename, is_bad, measurement_list)
 


haben, oder? ref_filename ein string mit pfad zu genau einer Datei, is_bad als true/false und measurement_list als cellarray mit 0..20 Dateien.

Viel Erfolg mit Raman, was für ein Aufbau hast du? Etwas selber gebautes, Mach–Zehnder?

Gruß Andy
 
Eldrad Ulthran
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 20.02.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.02.2018, 23:38     Titel:
  Antworten mit Zitat      
Hallo Andy,

ich würde schon gerne im Normalfall das "bad"flag vergessen und es nur angeben, wenn ich es brauche. Eine Alternative wäre hierzu auch, das Octave-Skript über ein Bash-Skript aufzurufen und die Dateinamen in Bash zu überprüfen. Dort wäre das Einführen einer Flagge "-bad" oder so einfacher, die dann je nachdem is_bad=true oder is_bad=false an Octave übergibt, ohne dass ich das jedes Mal tippen muss.
Die measurement_list könnte die Dateipfade enthalten, die durch Leerzeichen voneinander getrennt als ein einziger zusammenhängender String übergeben werden, das von Octave wieder mittels strsplit aufgedröselt wird.

Ich messe Raman-Spektren in Überschallexpansionen, der Aufbau ist schon etwas älter und wurde von etlichen meiner Vorgänger auf- und umgebaut. Du kannst ja mal nach "Curry-Jet Raman" googeln ;-)

Grüße, Eldrad
Private Nachricht senden Benutzer-Profile anzeigen
 
AndyydnA

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.02.2018, 10:52     Titel:
  Antworten mit Zitat      
Ahja, habe ich schon davon gelesen.

Ich verstehe nicht so recht, warum du über bash gehen willst. Bedenke außerdem, dass Dateinamen durch Leerzeichen getrennt zu Problemen führt, falls Leerzeichen im Dateinamen sind. Dazu lieber \0 oder so verwenden.

Ich kenne halt das System nicht und wie es zusammenspielt.
Btw, es auf IRC einen #octave channel und auch den deutschsprachigen #octave-de

https://wiki.octave.org/IRC

Gruß Andy
 
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.