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

varargin mit Paare

 

trust114
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 80
Anmeldedatum: 10.11.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.02.2016, 15:25     Titel: varargin mit Paare
  Antworten mit Zitat      
Hallo Leute,

hab nochmal ne Frage. Ich arbeite derzeit viel mit varargin. Es funktioniert auch recht gut. Nur muss ich jetzt versuchen je 2 Variablen miteinander zu verpaaren, sodass diese stets zueinander zugewiesen sind.

Hier ein Ausschnitt von meinem Code:

Code:
function [varargout]=Untitled2(varargin)

if nargin == 0
    fprintf('\nWeder Datei 1 noch Datei 2 wurden eingegeben.\n')

elseif nargin == 1
   
    fid = fopen(varargin{1});
    if fid == -1
        fprintf('\nDie eingegebene Datei befindet sich nicht\nim Verzeichnis. Bitte überprüfen Sie,\nob Sie den Dateinamen richtig eingegeben\nhaben.\n')
    else
        fprintf('\nDatei1 oder Datei 2\nfehlt noch.\n')

    end
end


elseif nargin > 2    
%Öffnen der Dateien
fid_Datei_1=fopen(varargin{1});
fid_Datei_2=fopen(varargin{2});


% Gibt den Inhalt der Datei wieder
Datei_1=fscanf(fid_Datei_1,'%c');
Datei_2=fscanf(fid_Datei_2,'%c');
end


Ich würde zunächst gerne Datei1 und Datei 2 miteinander verpaaren.

Hoffe ihr wisst was ich meine.

Zuletzt bearbeitet von trust114 am 28.02.2016, 15:53, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen


DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 28.02.2016, 15:43     Titel:
  Antworten mit Zitat      
Hallo,

es könnte hilfreich sein zu erklären was genau du damit meinst Wink

Zitat:
2 Variablen miteinander zu verpaaren


Gruß DSP
Private Nachricht senden Benutzer-Profile anzeigen
 
trust114
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 80
Anmeldedatum: 10.11.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.02.2016, 15:59     Titel:
  Antworten mit Zitat      
Ja hast vollkommen recht DSP. Ist wirklich schwer zu erklären.

Also angenommen meine Funktion steht soweit. Es muss mir möglich sein, das ich folgendes eingeben kann:

Untitled2('Datei_1.txt','Datei_2.txt','Bild','1','Farbe','black','Linienstärke',2,.....usw.)

Jetzt sieht man ja an Stelle der dritten Variable das Wort "Bild", diese Variable ist mit der vierten Variable also "1" verknüpft. Also zeigt er mir dieses Bild oder diesen Grafen 1 an. Und das natürlich in schwarz und mit der Linienstärke 2. Und das muss so weiter gehen können, ohne das der Benutzer diese Variablen benutzen muss. Er kann sie benutzen.

Hoffe ihr wisst jetzt wie ich es meine.
Danke im vorraus.
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: 28.02.2016, 16:05     Titel:
  Antworten mit Zitat      
Hallo trust114,

Die Nutzung von "Parameter-Value-Pairs" ist Standard bei Matlab-Funktionen. Deshalb verwenden viele Nutzer das auch sinnvollerweise in ihrem eigenen Code. Folglich gibt es bereits viele entsprechende Implementierungen im FileExchange. Siehe http://www.mathworks.com/matlabcent.....erm=parameter+value+pairs

Matlab's inputParser erledigt die Aufgabe auch effizient.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 28.02.2016, 16:26     Titel:
  Antworten mit Zitat      
Hallo,

evtl. hilft dir ja dieses Beispiel weiter:

Code:

function testvarargin(varargin)
    % Funktionsaufruf: testvarargin('PropertyName',PropertyValue,...)
    % PropertyName = Datei1
    %                Datei2
    %                Bild
    %                Farbe
    %                Linienstaerke
     
   
    % preallocate
    prop.Datei1 = '';
    prop.Datei2 = '';
    prop.Bild = [];
    prop.Farbe = [];
    prop.Linienbreite = [];

    % Process inputs and set prop fields.
    prop = parsepropval(prop,varargin{:});
   
    if isempty(prop.Datei1)
        % error handling
        errordlg('file 1 nicht vorhanden')
    end
   
    if isempty(prop.Datei2)
        % error handling
        errordlg('file 2 nicht vorhanden')
    end
   
    if isempty(prop.Bild)
        % error handling
        errordlg('Bild Typ nicht vorhanden')
    end
   
    if isempty(prop.Farbe)
        % error handling
        errordlg('Farbe nicht vorhanden')
    end
   
    if isempty(prop.Linienbreite)
        % error handling
        errordlg('Linienstärke nicht vorhanden')
    end
   
    % show prop structure
    prop
end

% -------------------- Subfunctions --------------------

    function prop = parsepropval(prop,varargin)
    % Parse property/value pairs and return a structure.
    properties = fieldnames(prop);
    arg_index = 1;
        while arg_index <= length(varargin)
            arg = varargin{arg_index};
            if ischar(arg)
                prop_index = match_property(arg,properties);
                prop.(properties{prop_index}) = varargin{arg_index + 1};
                arg_index = arg_index + 2;
            elseif isstruct(arg)
                arg_fn = fieldnames(arg);
                for i = 1:length(arg_fn)
                    prop_index = match_property(arg_fn{i},properties);
                    prop.(properties{prop_index}) = arg.(arg_fn{i});
                end
                arg_index = arg_index + 1;
            else
                error(['Properties must be specified by property/value pairs',...
                    ' or structures.'])
            end
        end
    end

    % --------------------

    function prop_index = match_property(arg,properties)
    % Utility function for parsepropval.
    prop_index = find(strcmpi(arg,properties));
        if isempty(prop_index)
            prop_index = find(strncmpi(arg,properties,length(arg)));
        end
        if length(prop_index) ~= 1
            error('Property ''%s'' does not exist or is ambiguous.',arg)
        end
    end
 


Der Funktionsaufruf erfolgt dann eben wie Jan schon sinnvollerweise vorgeschlagen hat über ParameterName und ParameterWert. Z.B. so...

Code:

>> testvarargin('Datei1','Datei1.txt','Bild',1,'Farbe','black','Linienbreite',2)

prop =

          Datei1: 'Datei1.txt'
          Datei2: ''
            Bild: 1
           Farbe: 'black'
    Linienbreite: 2
 


Gruß DSP
Private Nachricht senden Benutzer-Profile anzeigen
 
trust114
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 80
Anmeldedatum: 10.11.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.02.2016, 16:58     Titel:
  Antworten mit Zitat      
Danke euch zwei. Schau es mir jetzt an.
Private Nachricht senden Benutzer-Profile anzeigen
 
trust114
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 80
Anmeldedatum: 10.11.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.02.2016, 19:31     Titel:
  Antworten mit Zitat      
Was ist denn parsepropval für eine Funktion? In der Hilfe konnte ich sie nicht finden.
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 28.02.2016, 20:37     Titel:
  Antworten mit Zitat      
Hallo,

das ist keine Matlabfunktion. Du musst schon den ganzen Code verwenden...siehe Subfunctions!

Gruß DSP
Private Nachricht senden Benutzer-Profile anzeigen
 
trust114
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 80
Anmeldedatum: 10.11.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.03.2016, 15:02     Titel:
  Antworten mit Zitat      
Habe folgende Eingabe gemacht:

testvarargin'....txt','....txt', 'Bild', 1}

Dann erkennt er aber den string 'Bild' nicht.
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 19.03.2016, 15:09     Titel:
  Antworten mit Zitat      
Hallo,

erstens bitte immer die Fehlermeldung mit angeben! Zweitens...die Hochkomma fehlen. PropertyName muss immer in Hochkomma:

Code:

testvarargin{'Datei1', '....txt', 'Datei2', '....txt'}
 


PropertyValue logischerweise nur in Hochkomma, wenn es sich um einen string handelt.

Es muss immer folgende Syntax eingehalten werden: PropertyName1, PropertyValue1, PropertyName2, PropertyValue2,...

Diese Syntax ist somit nicht zulässig, da die ersten beiden Strings kein PropertyName besitzen

Code:

testvarargin{'....txt','....txt', 'Bild', 1}


...bzw. der 1. string wird als PropertyName verstanden, ist aber ungültig, da der Name nicht definiert ist.

Gruß DSP
Private Nachricht senden Benutzer-Profile anzeigen
 
trust114
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 80
Anmeldedatum: 10.11.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.03.2016, 15:17     Titel:
  Antworten mit Zitat      
Sorry, ok hat geklappt. Ich habe die Funktion etwas verändert, sodass die ersten beiden Argumente stets Datei 1 und Datei 2 sind.

Ich gebe dann ein:
Code:
testvarargin('...txt','...txt', 'Bild', 1, 'Farbe', 'black', 'Linienbreite', 2)


Er gibt mir dann zurück:
prop =

Bild: 1
Farbe: 'black'
Linienbreite: 2

Ohne eine Fehlermeldung, aber anzeigen tut er noch nichts.
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 19.03.2016, 15:21     Titel:
  Antworten mit Zitat      
Was soll er wo anzeigen? Die Funktion ist doch nur zur Zuordung von varargin. Die Struktur prop enthalt nun deine Funktionsinputs, je nach dem was du alles als PropertyName/PropertyValue übergeben hast. Was dann mit den Daten geschieht, steht nicht in dem Code Wink

trust114 hat Folgendes geschrieben:


Er gibt mir dann zurück:
prop =

Bild: 1
Farbe: 'black'
Linienbreite: 2

Ohne eine Fehlermeldung, aber anzeigen tut er noch nichts.


Somit macht die Funktion genau das was sie soll. Nun musst du eben diese Daten nutzen. Woher soll ich wissen, was mit den varargins passieren soll? Das war auch nicht die Frage des Threads Wink

Gruß DSP
Private Nachricht senden Benutzer-Profile anzeigen
 
trust114
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 80
Anmeldedatum: 10.11.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.03.2016, 15:41     Titel:
  Antworten mit Zitat      
Ok danke erstmal. Arbeite da dran weiter.

Wie kann ich die einzelnen props steuern?

Also wie in unserem Beispiel:
prop =

Bild: 1
Farbe: 'black'
Linienbreite: 2

Die 1 von Bild will ich in einer if Bedingung benutzen um dieses Bild auch anzeigen zu lassen.
Private Nachricht senden Benutzer-Profile anzeigen
 
trust114
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 80
Anmeldedatum: 10.11.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.03.2016, 15:57     Titel:
  Antworten mit Zitat      
Also anders gefragt:

Wo muss der ganze Inhalt rein was mit den varargins passieren soll?


Sorry für die dummen Fragen. Rolling Eyes
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 19.03.2016, 16:29     Titel:
  Antworten mit Zitat      
Woher soll ich das wissen?

Du hast keinerlei Code gepostet, wo ein Bild verwendet oder dargestellt wird. Auch kann ich nicht wissen, wozu du die anderen Argumente benötigst.

Nochmal...hier geht es nur um die Verarbeitung von varragin in Parameter-Value-Pairs. Mehr nicht. Zur Darstellung eines Bildes etc. solltest du dich im Forum/Matlab Doku schlau machen und wenn dann immer noch etwas unklar ist, gegebenfalls zum jeweiligen Thema einen eigenen Thread starten.

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