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

String suche in einer Zelle in einer Zelle

 

markuman
Forum-Guru

Forum-Guru


Beiträge: 320
Anmeldedatum: 14.12.12
Wohnort: ---
Version: 2013a/2013b, Octave 3.6.4, 3.7.7
     Beitrag Verfasst am: 03.05.2014, 09:41     Titel: String suche in einer Zelle in einer Zelle
  Antworten mit Zitat      
Ich kriegs gerade echt nicht hin.
Ich habe eine Zelle mit Strings in einer Zelle. Und diese nested cell möchte ich jetzt nach einem Begruff durchsuchen

Code:

>> c={'random char' 14 {'various' 'names' 'here'} 'more';'other string' 513 {'more' 'other' 'various' 'strings'} 'cell in cell'}
c =
{
  [1,1] = random char
  [2,1] = other string
  [1,2] =  14
  [2,2] =  513
  [1,3] =
  {
    [1,1] = various
    [1,2] = names
    [1,3] = here
  }
  [2,3] =
  {
    [1,1] = more
    [1,2] = other
    [1,3] = various
    [1,4] = strings
  }
  [1,4] = more
  [2,4] = cell in cell
}
 


Jetzt möchte ich wissen ob der String "more" in einer der nested cells vorhanden ist. Als rückgabe wert würde ich gerne wissen ob es in c{1,:} oder in c{2,:} drin ist. Oder ggf. auch gar nicht.

Wenn es nicht nested ist, ist es ja relativ einfach.
Code:

>> c={'more' 'other' 'various' 'strings'}
c =
{
  [1,1] = more
  [1,2] = other
  [1,3] = various
  [1,4] = strings
}
octave:7> find(ismember (c,'more'))
ans =  1
 

Aber mit der Zelle in der Zelle krieg ich es nicht hin. Any ideas?
_________________

DIY OR DIE Cool

entropie=char(floor(94*rand(1, round(100.*rand)) + 32))
https://github.com/markuman
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 03.05.2014, 10:19     Titel:
  Antworten mit Zitat      
Hallo,

ich würde eine Funktion schreiben, die du mit cellfun auf das Cell Array anwenden kannst.

Diese Funktion:
- verwendet strcmp, falls es sich um ein char-Array handelt
- ruft sich mit cellfun rekursiv selbst auf, falls es sich um ein cell-Array handelt
- gibt 0 zurück, falls es sich um einen anderen Datentyp handelt.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
markuman
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 320
Anmeldedatum: 14.12.12
Wohnort: ---
Version: 2013a/2013b, Octave 3.6.4, 3.7.7
     Beitrag Verfasst am: 03.05.2014, 10:26     Titel:
  Antworten mit Zitat      
Mein Problem ist ja, dass ich irgendwie nicht so wirklich weiß, wie ich auf die c{:,3} Zellen zugreife.
_________________

DIY OR DIE Cool

entropie=char(floor(94*rand(1, round(100.*rand)) + 32))
https://github.com/markuman
Private Nachricht senden Benutzer-Profile anzeigen
 
markuman
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 320
Anmeldedatum: 14.12.12
Wohnort: ---
Version: 2013a/2013b, Octave 3.6.4, 3.7.7
     Beitrag Verfasst am: 03.05.2014, 10:31     Titel:
  Antworten mit Zitat      
Also mir fällt nur ein Weg über eine Schleife ein. d=c{n,3} und anschließend d durchsuchen.
_________________

DIY OR DIE Cool

entropie=char(floor(94*rand(1, round(100.*rand)) + 32))
https://github.com/markuman
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 03.05.2014, 12:40     Titel:
  Antworten mit Zitat      
Hallo,

die Funktion
Code:
function res = recursivefind(str, pattern)

if ischar(str)
    res = strcmp(str, pattern);
elseif iscell(str)
    res = cellfun(@(str) recursivefind(str,pattern), str);
    res = any(res(:));
else
    res = false;
end


Aufruf mit:
Code:
cellfun(@(str) recursivefind(str, 'more'), c)


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
markuman
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 320
Anmeldedatum: 14.12.12
Wohnort: ---
Version: 2013a/2013b, Octave 3.6.4, 3.7.7
     Beitrag Verfasst am: 06.05.2014, 09:23     Titel:
  Antworten mit Zitat      
Alles klar, so gehts. Danke.
_________________

DIY OR DIE Cool

entropie=char(floor(94*rand(1, round(100.*rand)) + 32))
https://github.com/markuman
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.