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

strmatch-Problem

 

KaiS
Forum-Century

Forum-Century


Beiträge: 102
Anmeldedatum: 19.04.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.04.2013, 05:46     Titel: strmatch-Problem
  Antworten mit Zitat      
Hallo zusammen,

ich habe das folgende Cell Array:

Code:
reaction_eq =

    'oxoethyl7dG<>oxoethyl7dG'
    'AEPP+ATP+H2O>ADP+AEPP+H+PI'
    'ATP+H2O+PI>ADP+H+(2)PI'
    'PSIURI<>PSIURI'
 


Nun möchte ich den Befehl strmatch benutzen, um zu checken, ob ein Cell Array ein bestimmtes Zeichen hat oder nicht. Allerdings scheint strmatch nur mit Buchstaben und nicht mit Sonderzeichen zu funktionieren.

Code:
strmatch('<', reaction_eq)
gibt mir nämlich eine leere Matrix heraus, obwohl ja in Zeile 1 und 4 "<"-Zeichen vorhanden sind. Würde ich aber nach Buchstaben statt nach < suchen, bekomme ich ein richtiges Ergebnis raus.

Woran liegt das? Habt ihr eine Idee, wie ich nach "<" suchen kann?

Danke!

LG
Kai
Private Nachricht senden Benutzer-Profile anzeigen


jurtsche
Forum-Century

Forum-Century


Beiträge: 123
Anmeldedatum: 26.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.04.2013, 08:45     Titel:
  Antworten mit Zitat      
Hi,

Code:
any(strfind(reaction_eq, '<'))


strmatch wird es eh nicht mehr lange geben.

LG
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: 29.04.2013, 09:35     Titel: Re: strmatch-Problem
  Antworten mit Zitat      
Hallo Kai,

STRMATCH unterscheidet nicht zwischen normalen Buchstaben und Sonderzeichen. Deshalb kann ich Deine Beobachtung, dass STRMATCH hier für "normale Buchstaben funktioniert" nicht bestätigen. Gemäß der Dokumentation "help strmatch" und "doc strmatch" wird nach übereinstimmenden Buchstaben am Wortanfang gesucht. Du suchst aber nach Buchstaben innerhalb der Strings, richtig?

Es wurde leider angekündigt, dass STRMATCH "bald" nicht mehr Bestandteil von Matlab ist. Zwar habe ich aus Performance-gründen diese Funktion noch nie verwendet, weil FIND(STRCMP()) viel schneller ist. Aber ich kann nicht begreifen, wieso MathWorks eine korrekt arbeitende Funktion entfernen will und damit die Rückwärtskompatibilität einschränkt.

Code:
reaction_eq = {'oxoethyl7dG<>oxoethyl7dG', ...
    'AEPP+ATP+H2O>ADP+AEPP+H+PI', ...
    'ATP+H2O+PI>ADP+H+(2)PI', ...
    'PSIURI<>PSIURI'};
match = strfind(reaction_eq, '<');  % Ein Cell array!
index = ~cellfun('isempty', match);

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

Forum-Century

Forum-Century


Beiträge: 102
Anmeldedatum: 19.04.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.04.2013, 09:37     Titel:
  Antworten mit Zitat      
Hallo ihr beiden,

vielen Dank für die zügige Antwort! Dass strmatch bald eingestellt wird, wusste ich gar nicht.. Smile

Aber es funktioniert jetzt, danke!

LG
Kai
Private Nachricht senden Benutzer-Profile anzeigen
 
KaiS
Themenstarter

Forum-Century

Forum-Century


Beiträge: 102
Anmeldedatum: 19.04.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.04.2013, 10:55     Titel:
  Antworten mit Zitat      
Okay, jetzt habe ich doch noch eine zusätzliche Frage.

Folgende CellArrays sind gegeben:

Code:
test_eq =

    'A<>A'
    'B+C+D>E+B+F+G'
    'C+D+G>E+F+G'
    'H<>H'

test_eq_final =

    'A<A'
    'A>A'
    'B+C+D>E+B+F+G'
    'C+D+G>E+F+G'
    'H<H'
    'H>H'

 


D.h. der Unterschied zwischen beiden Zellen ist nur, dass in test_eq_final die Zeilen von test_eq kopiert wurden, in denen ein "<>" enthalten war, und dann aufgeteilt wurden in zwei Zeilen.

Nun sei noch gesagt, dass ">" und "<" Richtungen (forward und backward) angeben, die jeweils unterschiedliche Geschwindigkeitskonstanten haben. Gegeben sind mir zu jeder der 4 Reaktionen von test_eq die jeweilige forward (=fw) Geschwindigkeitskonstante als auch die backward (=bw) Geschwindigkeitskonstante (falls die backward Richtung existiert in der Reaktion).
Diese sind in rate_const_fw und rate_const_bw gespeichert und sind beide 4x1 Zellen.

Was ich nun tun will ist, dass ich zu jeder Zeile von test_eq_final die entsprechende Geschwindigkeitskonstante zuordne.

Dies versuche ich mit dem folgenden Code zu bewerkstelligen.

Code:
for f = 1:length(test_eq_final)
    if ~isempty(strfind(test_eq_final{f},'<'))
        tests(f).rate_const = rate_const_bw{f};
        tests(f+1).rate_const = rate_const_fw{f};
    elseif ~isempty(strfind(test_eq_final{f},'>'))
        if isempty(strfind(test_eq_final{f-1},'<'))
            match = strfind(test_eq, test_eq_final{f});  
            index = ~cellfun('isempty', match);
            pos = find(index);
            tests(f).rate_const = rate_const_fw{pos};
        end
    end
end


Als Ergebnis müsste folgen (theoretisch gesehen; Zahlenwerte habe ich übersichtshalber ausgelassen):

Code:

tests(1).rate_const = rate_const_bw{1}
tests(2).rate_const = rate_const_fw{1}
tests(3).rate_const = rate_const_fw{2}
tests(4).rate_const = rate_const_fw{3}
tests(5).rate_const = rate_const_bw{4}
tests(6).rate_const = rate_const_fw{4}
 


Bis zu f = 5 funktioniert mein Code auch und bringt die richtigen Ergebnisse/Zuweisungen. Aber da rate_const_fw nur eine 4x1 Zelle ist, stoße ich dimensionstechnisch bei f = 5 an die Grenzen.

Mir fällt aber nicht ein, wie ich den Code so schreiben könnte, damit ich das o.g. Ergebnis bekommen kann.

Kann mir vllt jmd weiterhelfen?

Danke!

LG
Kai
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.