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

strings filtern

 

Platin
Forum-Century

Forum-Century


Beiträge: 174
Anmeldedatum: 07.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.08.2010, 18:21     Titel: strings filtern
  Antworten mit Zitat      
Hey an Alle,

ich versuche gerade Textfiles nach strings zu filtern.
Die Strings haben einen bestimmten Aufbau.
zB.: SxPy, L-SxPy, N-SxPy, I-SxPy.
also zB: S2P3 oder N-S5P9.
Ich möchte Matlab also sagen können das es mir 1.) nur nach strings mit SxPy sucht. Also nicht nach strings wie SxPyO, SxPyT. 2.) Nach Strings mit L, N oder I "-" SxPy. Also zB. I-SxPy.
Ich dachte das man es mit dem Befehl regexp ggf. hinbekommen könnte danach zu Filtern.
Muss auch nicht mit regexp gemacht werden. Es sah mir blos so aus als ob das die umfangreichste filterfunktion von matlab wäre.
Aber ich habe da zwar gesehen das man damit viel machen kann, aber nichts dergleichen was ich machen will.
kennt ihr dafür einen passenden befehl?

danke euch
Private Nachricht senden Benutzer-Profile anzeigen


denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 09.08.2010, 18:44     Titel:
  Antworten mit Zitat      
Hallo


also es geht schon mit REGEXP:

Code:

str={'S2P3','N-S5P9','S2P1O'}
res = regexp(str,'^([NLI]-)?S\dP\d$', 'match')
res= [res{:}]
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Platin
Themenstarter

Forum-Century

Forum-Century


Beiträge: 174
Anmeldedatum: 07.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.08.2010, 18:58     Titel:
  Antworten mit Zitat      
hey,

ok super.
danke dir.

mfg
Private Nachricht senden Benutzer-Profile anzeigen
 
Platin
Themenstarter

Forum-Century

Forum-Century


Beiträge: 174
Anmeldedatum: 07.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.08.2010, 14:58     Titel:
  Antworten mit Zitat      
Hey, ich habe noch ne Rückfrage ich kann das d bei dP nicht deuten und das $ kann ich mittels der hilfe auch nicht deuten.

kannst du mir da nochmal auf die sprünge helfen?

mfg
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 10.08.2010, 15:06     Titel:
  Antworten mit Zitat      
Hallo

tippe, dann siehst andere Hilfe als in Doku
Code:


\d -- steht für Ziffern zw. 0-9
^ -- Vergleich ab Anfang des Strings
$ -- Vergleich ab Ende des Strings

In Prinzip brauchst du nicht ^, ist an dieser Stelle wohl doppelt gemogelt.

Code:

str={'S2P3','N-S5P9','S2P1O'}
res = regexp(str,'([NLI]-)?S\dP\d$', 'match')
res= [res{:}]
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Platin
Themenstarter

Forum-Century

Forum-Century


Beiträge: 174
Anmeldedatum: 07.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.08.2010, 15:32     Titel:
  Antworten mit Zitat      
Hey,

danke für die schnelle Antwort.
Was meinst du mit Vergleich AB Ende des Strings?
Weil der Code funzt bei mir nicht.
Liegt das vllt daran das meine strings in Zellen liegen?
Also meine strings die er filtern sollen liegen in über 100 Zellen.
Mein 'str' ist eine 1X100 Matrix und jede Zelle enthält einen String wie L-S3P5 oder so.

Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 10.08.2010, 16:00     Titel:
  Antworten mit Zitat      
Das heißt, dass letztes Zeichen mit letztem Zeichen aus Suchmuster verglichen wird, dann Vorletztes mit Vorletztem, und so weiter.

Welchen Class hat deine Matrix? eine Cell? oder Char?
Und was funktioniert nicht? Kommt Fehlermeldung aus?
Private Nachricht senden Benutzer-Profile anzeigen
 
Platin
Themenstarter

Forum-Century

Forum-Century


Beiträge: 174
Anmeldedatum: 07.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.08.2010, 16:13     Titel:
  Antworten mit Zitat      
Hallo also ich weiß nicht ob ich mit den Begrifflichkeiten richtig umgehe.
Aber ich denke mit char ist ein string gemeint und mit cell eine zahl oder ?
Also meine variable 'str' ist eigentlich eine 1x100 Matrix und jeder Zelle steht text. Das steht so da 'L-S3P9'.
Es kommt keine Fehlermeldung sondern ich möchte eigentlich sagen, das wenn die zelle einen gewünschten Eintrag enthält dann soll er sich diese Spalte merken.
Weil ich später die Variable index brauche um später sagen zu können, das er mir die Spalten index ausliest.
Das habe ich versucht in dem in dem ich den befehl end anstatt match nahm und sagte wenn >=0 dann merken.
Aber index bleibt leer !
Code:
index=[];
    for kk=1:1:len
        if regexp(char(C{kk}),([NLI]-)?S\dP\d$','end')>=0  % prüfen ob die Strings NLI- SxPy enthalten
            index=[index kk];                 % wenn ja nummer der spalten merken
        end
    end


mfg
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 10.08.2010, 17:14     Titel:
  Antworten mit Zitat      
Abgesehen von einem Fehler, sollte es so laufen


Code:

C={'S2P3';'N-S5P9';'S2P1O';'L-S2P0'}
 index=[];
    for kk=1:length(C)
        if regexp(char(C{kk}),'([NLI]-)?S\dP\d$','end')>=0  
            index=[index kk];                
        end
    end
 


noch eine Möglichkeit:
Code:


C={'S2P3';'N-S5P9';'S2P1O';'L-S2P0'}
index = regexp(C,'([NLI]-)?S\dP\d$','end')
index= find(~cellfun(@isempty,index))
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Platin
Themenstarter

Forum-Century

Forum-Century


Beiträge: 174
Anmeldedatum: 07.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.08.2010, 20:23     Titel:
  Antworten mit Zitat      
Hey,

hmm komisch, weil ich hatte es doch so, aber index war leer ? Also abgesehen von dem ' .
Weil im Prinzip hast du ja jetzt nix geändert, oder habe ich was übersehen?
Und das muss so funktionieren für eine 1x120 Matrix ?
Ist doof weil ich morgen nicht auf Arbeit bin und das testen kann.
Aber Donnerstag bin ich wieder da und versuche es nochmal, aber ich denke es wird wieder nicht funktionieren, weil ich ja nichs ändere.
Das fehlende ' habe ich glaube ich beim Einfügen ausversehen gelöscht.
In matlab müsste das richtig stehen.

Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 12.08.2010, 09:11     Titel:
  Antworten mit Zitat      
Hallo,
Wenn es nicht funktioniert, dann hänge deine Matrix, als MAT-Datei an, packe diese aber vorher in ZIP-Archiv ein.
Ich probiere dann mit deinen Daten direkt zu lösen. Bin aber wieder am Montag da.
Private Nachricht senden Benutzer-Profile anzeigen
 
Platin
Themenstarter

Forum-Century

Forum-Century


Beiträge: 174
Anmeldedatum: 07.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.08.2010, 12:29     Titel:
  Antworten mit Zitat      
Hey, also das funktioniert soweit sehr gut.
Aber ich müsste meinen Filter noch ein wenig erweitern.
Da er nicht nur LNI-SxPy, sondern auch LNI-SxPy-x/y lesen soll.
Und ich möchte dann noch ein paar weitere Wörter in den Filter einbauen, die ein wenig anders aufgbaut sind.
also was ich will ich noch machen:
1. Er soll auch strings wie S2P3-3 lesen oder 2-S2P3
2. Ich möchte den Filter um eine weitere "Strucktur" erweitern.
also zb. soll er zusätzlich auch files wie E1 oder E1* lesen.

Und ich habe mir die Hilfe jetzt ein paar mal zu regexp durchgelesen, aber ich werde nicht wirklich schlau daraus. Hätten wir in dem Fall nicht zum Bsp. das "Keyword" 'matchcase' verwenden sollen. Ich habe das so verstanden das man immer vorher ein Keyword eingeben muss was den Befehl aktiviert.
Weil ja in verschiedenen fällen ?- oder ? verwendet wird, aber ich dachte damit er versteht welches ? gemeint ist muss das keyword vorher eingeben.
un woher wusstest du eigentlich das \d für zahlen 0...9 steht ?

Danke dir vielmals
viele Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Platin
Themenstarter

Forum-Century

Forum-Century


Beiträge: 174
Anmeldedatum: 07.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.08.2010, 12:22     Titel:
  Antworten mit Zitat      
Weiß jemand Rat ?

Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 16.08.2010, 18:11     Titel:
  Antworten mit Zitat      
Hallo

zu 1)
meinst du so?
Code:

 C={'S2P3';'N-S5P9';'S2P1O';'L-S2P0';'2-S2P3';'S2P3-3'}
index = regexp(C,'(([NLI]|\d)-)?S\dP\d(-\d)?$','end')
index= find(~cellfun(@isempty,index))
 


zu 2) bitte etwas erläutern, habe nicht ganz verstanden,
ob du meinst alle Files auswählen, welche mit E1 anfangen?

Code:

C={'S2P3';'N-S5P9';'S2P1O';'L-S2P0';'2-S2P3';'S2P3-3';'E1-S2P3-3';'E1'}
index = regexp(C,'((([NLI]|\d)-)?S\dP\d(-\d)?$|E1(.)*)','end')
index= find(~cellfun(@isempty,index))
 
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 16.08.2010, 18:14     Titel:
  Antworten mit Zitat      
Platin hat Folgendes geschrieben:
ei
woher wusstest du eigentlich das \d für zahlen 0...9 steht ?


tippe einfach
Code:

dann siehst du woher, aber du kannst auch hier nachlesen

http://www.mathworks.com/access/hel.....matlab_prog/f0-42649.html
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 - 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.