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

Finde "string1" ODER "string2" > Wie

 

DaNylz
Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 14.02.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.02.2013, 14:23     Titel: Finde "string1" ODER "string2" > Wie
  Antworten mit Zitat      
Hallo!

Ich durchsuche eine Cell-Matrix (Data01) erfolgreich mit folgendem Befehl nach dem Begriff "string":

Code:
Var1 = Data01(strcmp(Data01(:,4),'string'),5)


Jetzt würde ich aber im gleichen Zug direkt nach mehreren Strings suchen:

Also ungefähr so:

Code:
Data01(strcmp(Data01(:,4),'stringA'|'stringB'|'stringC'),5)


das Zeichen "|" ist an deiser Stelle natürlich unangebracht weil es für numerische Angaben benutzt wird. Aber so ist es gemeint Wink

Entscheidend ist: Es kommt eh immer NUR einer der dreien vor, jeh nachdem welchen Datensatz ich damit untersuche. Ich will nur nicht immer den Suchstring anpassen müssen.

Was muss ich anstellen, damit er anstatt nach nur dem einen string, nach allen dreien sucht?

Wenn ich den Befehl 3 mal hintereinander mit unterschiedlichem string laufen lasse ersetzt sich der Output immer wieder durch den darauffolgenden.


Danke!

DaNylz
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: 15.02.2013, 14:40     Titel: Re: Finde "string1" ODER "string2" >
  Antworten mit Zitat      
Hallo DaNylz

Zitat:
Wenn ich den Befehl 3 mal hintereinander mit unterschiedlichem string laufen lasse ersetzt sich der Output immer wieder durch den darauffolgenden.

Das ist nicht aussagekräftig. Solche Text-Beschreibungen schildern das, was Du machen möchtest, aber der Fehler steckt in der eigentlichen Implementierung. Also müssen wir auch den Code sehen, um die wahrscheinlich kleine Änderung vorschlagen zu können.

Code:
Var1 = Data01(strcmp(Data01(:,4),'string'),5)


Jetzt würde ich aber im gleichen Zug direkt nach mehreren Strings suchen:

Also ungefähr so:

Code:
index = strcmp(Data01(:,4),'stringA') | ...
                   strcmp(Data01(:,4),'stringB') | ...
                   strcmp(Data01(:,4),'stringC'));
Data01(index,5)

Oder:
Code:
index = ismember(Data01(:,4), {'stringA', 'stringB','stringC'});
Data01(index,5)

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
DaNylz
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 14.02.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.02.2013, 14:49     Titel:
  Antworten mit Zitat      
Code:
>> index = strcmp(Data01(:,4),'fix') |
                   strcmp(Data01(:,4),'fixation') |
                   strcmp(Data01(:,4),'ISI'));
Data01(index,5)
 index = strcmp(Data01(:,4),'fix') |
                                    |
Error: Expression or statement is incomplete or incorrect.



klappt leider nicht...
ebenso :

Code:
index = ismember(Data01(:,4), {'fix', 'fixation','ISI'});
Data01(index,5)
Error using cell/ismember>cellismemberlegacy (line 131)
Input A of class cell and input B of class cell must be cell arrays of strings, unless one is a string.

Error in cell/ismember (line 76)
    [varargout{1:nlhs}] = cellismemberlegacy(varargin{:});


fix, fixation und ISI sind die 3 strings die ich suche!
Private Nachricht senden Benutzer-Profile anzeigen
 
Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 15.02.2013, 16:21     Titel:
  Antworten mit Zitat      
Ohne auf die Schnelle konkreten Code liefern zu können schlage ich vor "regular expressions" als Lösungsweg zu erkunden.

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
DaNylz
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 14.02.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.02.2013, 16:23     Titel:
  Antworten mit Zitat      
Ich versuche jetzt gerade die Abfrage 3 mal laufen zu lassen.
Nur einer der Outputs würde dann ja nicht leer sein, da eben nur einer der strings immer vorkommt. Dann könnte man die 3 Outputs zusammenfügen und hätte einen globalen, den Output des einen Strings enthält, der gefunden wurde?

Aber wie füge ich das zusammen?
Private Nachricht senden Benutzer-Profile anzeigen
 
DaNylz
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 14.02.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.02.2013, 16:25     Titel:
  Antworten mit Zitat      
habs!

Code:
Output_global = [Output01(:,1); Output02(:,1); output(:,1)]
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: 16.02.2013, 00:52     Titel:
  Antworten mit Zitat      
Hallo DaNylz,

Bitte schaue Dir den Code, den ich gepostet habe noch mal genau an:
Code:
index = strcmp(Data01(:,4),'stringA') | ...
                   strcmp(Data01(:,4),'stringB') | ...
                   strcmp(Data01(:,4),'stringC'));


Und jetzt Deinen:
Code:
>> index = strcmp(Data01(:,4),'fix') |
                   strcmp(Data01(:,4),'fixation') |
                   strcmp(Data01(:,4),'ISI'));
 index = strcmp(Data01(:,4),'fix') |
                                    |
Error: Expression or statement is incomplete or incorrect.

Siehst Du den Unterschied? Du benötigst '...' am Ende der Zeile.

Zitat:
Input A of class cell and input B of class cell must be cell arrays of strings, unless one is a string.

Dieser Fehler bedeutet, dass die Input-Daten in Data01(:,4) nicht nur aus Strings bestehen. Es wäre wichtig gewesen das zu erwähnen.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
DaNylz
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 14.02.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.02.2013, 03:26     Titel:
  Antworten mit Zitat      
das '...' kennzeichnet sozusagen, dass es noch weiter geht?
Private Nachricht senden Benutzer-Profile anzeigen
 
Seban
Forum-Meister

Forum-Meister


Beiträge: 600
Anmeldedatum: 19.01.12
Wohnort: ---
Version: ab R2014b
     Beitrag Verfasst am: 16.02.2013, 04:11     Titel:
  Antworten mit Zitat      
Ja, ... ist quasi ein Zeilenumbruch im Quellcode.

Das ist das gleiche ohne:
Code:
index = strcmp(Data01(:,4),'stringA') | strcmp(Data01(:,4),'stringB') | strcmp(Data01(:,4),'stringC'));

_________________

Richtig fragen
Debugging
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.