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

Laden doppelter Dateinamen verhindern

 

fuchs
Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 06.12.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.12.2012, 10:54     Titel: Laden doppelter Dateinamen verhindern
  Antworten mit Zitat      
Moin,
ich habe ein Problem, an dem ich jetzt schon eine ganze Weile sitze.
Ich möchte mir über eine GUI Dateien in eine Liste laden und diese dann weiter verarbeiten. Das habe ich auch soweit hinbekommen.
Ich habe also eine Listbox und einen button "hinzufügen", der mit uigetfile Dateinamen lädt.
Multiselect ist aktiviert und wenn ich jetzt Dateinamen auswähle, die schon in der Liste stehen, sollen diese nicht nochmal in die Liste geschrieben werden. Und das ist mein Problem! Wie kann ich das bewerkstelligen?

Hier mein Code der Callback Funktion des Buttons:
Code:
if isempty(get(handles.Liste, 'String'))==1
    filename=uigetfile({'*.*','All files'},...
                        'Choose files','MultiSelect','on');
    if char(filename) == 0
        filename=[];
    end;
else
    filename=get(handles.Liste, 'String');
    f=char(uigetfile({'*.*','All files'},...
                 'Choose files','MultiSelect','on'));
    if char(f) ~= 0
        for i=1:size(f,1),
            if sum(strcmp(f(i,:),filename))==0
                filename=cellstr(f(i,:),filename); %mein Hauptproblem
            end;
        end;
    end;
end;
set(handles.Liste, 'String', filename);


Ich bin für jede Hilfe dankbar.
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: 19.12.2012, 17:21     Titel: Re: Laden doppelter Dateinamen verhindern
  Antworten mit Zitat      
Hallo fuchs,

ISEMPTY gibt bereits ein LOGICAL zurück, dann muss man nicht nochmal mit ==1 testen, ob es TRUE ist.
Weitere Ideen:
Code:
oldFile = get(handles.Liste, 'String');
if isempty(oldList)  % Could be an empty string
  oldFile = {};
end

% Catch the path also in every case!
[filename, pathname] = uigetfile({'*.*','All files'}, ...
                 'Choose files','MultiSelect','on');
if isequal(filename, 0)
  file ={};
else
  file = strcat(pathname, filename);
  file = unique(cat(1, oldFile, file(:)));  % Unique and sorted
end
set(handles.Liste, 'String', filen);

Der UNIQUE-Befehl wirft dabei also alle doppelten Files raus.

Das Umwandeln in eine CHAR-Matrix ist unpraktisch, da die Files ja unterschiedliche lange Namen haben können.

Wenn wirklich nur der File-Namen wichtig ist, kann man den pathname-Teil weglassen. Allerdings sind solche Pfad-losen Filenamen immer immer immer wieder eine Quelle nervender Bugs. Deshalb sind absolute Filenamen, also mit Pfad, unbedingt zu bevorzugen.

Gruß, Jan
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 - 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.