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

Erkennung einer String-Kette als String-Array

 

Strohfeuer
Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 17.09.08
Wohnort: Berlin
Version: 7.5.0.342 (R2007b)
     Beitrag Verfasst am: 21.09.2008, 18:56     Titel: Erkennung einer String-Kette als String-Array
  Antworten mit Zitat      
In einem GUI wird über ein EditTXT-Feld eine String-Kette in folgendem Format eingelesen: 'name1','name2','name3',...
Die jeweiligen Namen stehen für Ordnernamen. Diese Namen will ich in ein String-Array übergeben, sodass ich danach Zugriff auf die Ordner habe. Nun kann ich diese String-Kette nur über get(edit1,'String') auslesen und weiß nicht, wie ich sie danach quasi in die einzelnen Strings zerteile!?

Wenn man diese Textzeile manuell eintippt, würde man sie ja in {} einschließen und MATLAB weiß, was ich meine. Hier lässt sich das aber scheinbar nicht benutzen!?
Private Nachricht senden Benutzer-Profile anzeigen


steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.022
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2023b
     Beitrag Verfasst am: 22.09.2008, 07:49     Titel:
  Antworten mit Zitat      
Moin,

schau dir mal die Funktionen
Code:
an. Diese machen genau das was du willst - auch ohne (semi-)manuelle Eingabe.

Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
nschlange
Ehrenmitglied

Ehrenmitglied



Beiträge: 1.318
Anmeldedatum: 06.09.07
Wohnort: NRW
Version: R2007b
     Beitrag Verfasst am: 22.09.2008, 10:22     Titel:
  Antworten mit Zitat      
Hi,

wie genau liegt denn der String vor?
Wirklich als String?
Als 1x1-Cell?
Als 1xn-Cell?

Gib mal ein lauffähiges Beispiel.

Du kannst mit uigetfile zwar mehrere Dateien auswählen, uigetdir kann das für Verzeichnisse aber glaube ich nicht.
_________________

Viele Grüße
nschlange

"Chuck Norris ejakuliert fluessigen Stahl!"
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Strohfeuer
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 17.09.08
Wohnort: Berlin
Version: 7.5.0.342 (R2007b)
     Beitrag Verfasst am: 22.09.2008, 11:26     Titel:
  Antworten mit Zitat      
Die Namen der verschiedenen Ordner sollen mit einem Mal über das EditText-Feld eingegeben werden. Deshalb kam ich auf die Idee, dieselbe Syntax vorzuschreiben wie bei meinem vorherigen Funktionsaufruf im M-File. Da sah das so aus:
Code:
xyz=Funktion1({'Ordner1','Ordner2','Ordner3'});

Bei der Übergabe der Parameter wurde das dann automatisch als String-Vektor erkannt und die einzelnen Elemente (Ordner1, Ordner2, Ordner3) konnten separat angefasst werden.
Das soll jetzt wieder so funktionieren, nur dass die Ordnernamen über ein EditText-Feld in meinem GUI eingegeben werden. Da ich auf das Textfeld nur über seine String-Eigenschaft zugreife, gehe ich mal davon aus, dass es als ein String gewertet wird!? Die Zuordnung erfolgt dann durch:
Code:
directories = get(In_text,'String');
Private Nachricht senden Benutzer-Profile anzeigen
 
nschlange
Ehrenmitglied

Ehrenmitglied



Beiträge: 1.318
Anmeldedatum: 06.09.07
Wohnort: NRW
Version: R2007b
     Beitrag Verfasst am: 22.09.2008, 12:21     Titel:
  Antworten mit Zitat      
Hi,

hilft das Beispiel:
Code:
function testgui2
h.fig = figure('position',[300 300 400 450]);
h.btn1=uicontrol('style','pushbutton','position',[20 60 100 40],'string','OK');
h.text1=uicontrol('style','edit','position',[130 60 250 350]');
set(h.text1,'FontName','FixedWidth','FontSize',12,'Max',2);
set(h.text1,'String',{'name1','name2','name3'});
set(h.btn1,'callback',{@cb1,h})

function h = cb1(hObject, eventdata, h)
dirs=get(h.text1,'String');
keyboard
for k = 1 : numel(dirs)
    disp (dirs{k})
    cd(dirs{k})
    dir
    cd ('..')  
end
?
_________________

Viele Grüße
nschlange

"Chuck Norris ejakuliert fluessigen Stahl!"
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Strohfeuer
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 17.09.08
Wohnort: Berlin
Version: 7.5.0.342 (R2007b)
     Beitrag Verfasst am: 22.09.2008, 17:54     Titel:
  Antworten mit Zitat      
Mit folgender Zeile
Code:
set(h.text1,'String',{'name1','name2','name3'});
umschiffst du das eigentliche Problem geschickt Wink
Du teilst MATLAB ja in dem Moment direkt mit, dass du gern ein String-Array mit drei Strings haben möchtest. Machst du die Eingabe im Textfeld aber manuell, fügt MATLAB jeweils außen ein ' an und verstümmelt damit die Eingabe...
Private Nachricht senden Benutzer-Profile anzeigen
 
nschlange
Ehrenmitglied

Ehrenmitglied



Beiträge: 1.318
Anmeldedatum: 06.09.07
Wohnort: NRW
Version: R2007b
     Beitrag Verfasst am: 22.09.2008, 18:04     Titel:
  Antworten mit Zitat      
Dann initialisier das Ding so:
Code:
set(h.text1,'String',{''});

_________________

Viele Grüße
nschlange

"Chuck Norris ejakuliert fluessigen Stahl!"
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.022
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2023b
     Beitrag Verfasst am: 22.09.2008, 18:05     Titel:
  Antworten mit Zitat      
Moin,

und wenn du dich mal an der Funktion
Code:
versuchst? Dann kannst du dir die Hochkommata sparen und als Delimiter ',' nehmen.

Probiers mal aus...

Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
Strohfeuer
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 17.09.08
Wohnort: Berlin
Version: 7.5.0.342 (R2007b)
     Beitrag Verfasst am: 22.09.2008, 21:18     Titel:
  Antworten mit Zitat      
So, nachdem ich schon kurz davor stand, entweder den Rechner aus dem Fenster oder zumindest MATLAB von der Platte zu schmeißen, habe ich das Problem gelöst. Wahrscheinlich extrem umständlich bzw. unelegant, aber meine schönen Ideen waren ja bis dahin auch alle gescheitert Rolling Eyes

Meine Intention war es ja, über ein EditText-Feld Ordnernamen einzulesen, die dann für den späteren Zugriff auf diese Ordner in einem String-Vektor zwischen gelagert werden.
Der Benutzer gibt nun vorab über ein Pop-up Menu die Anzahl der Ordner an. Diese Anzahl verwende ich später in einer switch-Auswahl.

Code:
handles.Folders = get(handles.In_Folders,'String');                         % Übergabe des Textfeldes an 'handles.Folder_String'
x_FolderNumber = get(handles.Drop_Folders,'Value')-1;                       % Übergabe der Ordneranzahl an 'x_FolderNumber'
switch x_FolderNumber                                                       % Auswahl der angegebenen Ordneranzahl
    case 1
        x_cellFolders = textscan(handles.Folders, '%s');                    % Übernahme der Ordnernamen
        handles.Folders = x_cellFolders{1}(1,1);                            % Umwandlung der Werte aus dem Cell-Array in einen String-Vektor
    case 2
        x_cellFolders = textscan(handles.Folders, '%s%s');                  % Übernahme der Ordnernamen
        handles.Folders = [x_cellFolders{1}(1,1);x_cellFolders{2}(1,1)];    % Umwandlung der Werte aus dem Cell-Array in einen String-Vektor
    case 3
        x_cellFolders = textscan(handles.Folders, '%s%s%s');                % Übernahme der Ordnernamen
        handles.Folders = [x_cellFolders{1}(1,1);x_cellFolders{2}(1,1);...  % Umwandlung der Werte aus dem Cell-Array in einen String-Vektor
            x_cellFolders{3}(1,1)];
    case 4
        x_cellFolders = textscan(handles.Folders, '%s%s%s%s');              % Übernahme der Ordnernamen
        handles.Folders = [x_cellFolders{1}(1,1);x_cellFolders{2}(1,1);...  % Umwandlung der Werte aus dem Cell-Array in einen String-Vektor
            x_cellFolders{3}(1,1);x_cellFolders{4}(1,1)];
    case 5
        x_cellFolders = textscan(handles.Folders, '%s%s%s%s%s');            % Übernahme der Ordnernamen
        handles.Folders = [x_cellFolders{1}(1,1);x_cellFolders{2}(1,1);...  % Umwandlung der Werte aus dem Cell-Array in einen String-Vektor
            x_cellFolders{3}(1,1);x_cellFolders{4}(1,1);...
            x_cellFolders{5}(1,1)];
end


Vielen Dank an alle Beteiligten bei dieser syntaktischen Schlacht! Razz
Private Nachricht senden Benutzer-Profile anzeigen
 
nschlange
Ehrenmitglied

Ehrenmitglied



Beiträge: 1.318
Anmeldedatum: 06.09.07
Wohnort: NRW
Version: R2007b
     Beitrag Verfasst am: 22.09.2008, 21:37     Titel:
  Antworten mit Zitat      
Hi,

wenn es läuft ist ja gut, das ginge aber mit weniger Schreibarbeit, für beliebig viele Ordner und fehlerunanfälliger.
Hast Du mein 3. Posting gesehen?
_________________

Viele Grüße
nschlange

"Chuck Norris ejakuliert fluessigen Stahl!"
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Strohfeuer
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 17.09.08
Wohnort: Berlin
Version: 7.5.0.342 (R2007b)
     Beitrag Verfasst am: 22.09.2008, 21:44     Titel:
  Antworten mit Zitat      
Das mit dem Initialisieren!?
Das funktioniert doch aber nicht. Der initialisierte String wird doch bei der Eingabe im Textfeld überschrieben!?
Private Nachricht senden Benutzer-Profile anzeigen
 
nschlange
Ehrenmitglied

Ehrenmitglied



Beiträge: 1.318
Anmeldedatum: 06.09.07
Wohnort: NRW
Version: R2007b
     Beitrag Verfasst am: 22.09.2008, 21:55     Titel:
  Antworten mit Zitat      
Hast Du das denn mal versucht?
Alternativ siehe
Code:

_________________

Viele Grüße
nschlange

"Chuck Norris ejakuliert fluessigen Stahl!"
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Strohfeuer
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 17.09.08
Wohnort: Berlin
Version: 7.5.0.342 (R2007b)
     Beitrag Verfasst am: 22.09.2008, 22:57     Titel:
  Antworten mit Zitat      
nschlange hat Folgendes geschrieben:
Hast Du das denn mal versucht?
Alternativ siehe
Code:


Jap. Das funktioniert hierbei nicht, weil keine Character-Arrays als Grundlage vorliegen.
Private Nachricht senden Benutzer-Profile anzeigen
 
nschlange
Ehrenmitglied

Ehrenmitglied



Beiträge: 1.318
Anmeldedatum: 06.09.07
Wohnort: NRW
Version: R2007b
     Beitrag Verfasst am: 23.09.2008, 08:40     Titel:
  Antworten mit Zitat      
Moin,

ich glaub ich habs jetzt auch gecheckt. Du gibst die Ordner durch Komma getrennt ein, ich dachte Du trennst mit Return.
Klappt dann folgendes:
Code:
function testgui2
h.fig = figure('position',[300 300 400 450]);
h.btn1=uicontrol('style','pushbutton','position',[20 60 100 40],'string','OK');
h.text1=uicontrol('style','edit','position',[130 60 250 350]');
set(h.text1,'FontName','FixedWidth','FontSize',12,'Max',2);
set(h.btn1,'callback',{@cb1,h})

function h = cb1(hObject, eventdata, h)
dirs=get(h.text1,'String');
dirs=regexp(dirs,',','split');
for k = 1 : numel(dirs)
    disp (dirs{k})
    cd(dirs{k})
    dir
    cd ('..')  
end
?

[b]Edit: Oder gibst Du die ' auch mit ein?[/code]
_________________

Viele Grüße
nschlange

"Chuck Norris ejakuliert fluessigen Stahl!"
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Strohfeuer
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 17.09.08
Wohnort: Berlin
Version: 7.5.0.342 (R2007b)
     Beitrag Verfasst am: 23.09.2008, 11:55     Titel:
  Antworten mit Zitat      
Da ich die Erkennung der Strings jetzt über textscan durchführe und der Standard-Delimiter das Leerzeichen ist, sind die Ordnernamen einfach durch Leerzeichen und ohne jegliche andere Sonderzeichen getrennt.

regexp liefert doch aber scheinbar "nur" den Index eines erkannten Strings zurück. Wäre also für mich auch nicht unbedingt eine Vereinfachung der Prozedur!?
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 - 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.