|
|
| geieraffe |

Forum-Fortgeschrittener
|
 |
Beiträge: 97
|
 |
|
 |
Anmeldedatum: 19.04.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 13.06.2012, 15:29
Titel: String-Cells vergleichen
|
 |
Hallo,
ich habe 2 Cells die jeweils Strings enthalten (Dateinamen).
Jetzt hätte ich gerne nur die, die deckungsgleich sind.
ich habe schon eine weile gesucht und bin auf SETDIFF() gestoßen,
allerdings funktioniert das nicht ganz, weil meine Strings nicht identisch sind:
Cell A:
'file_name_2012_xxx.xxx'
Cell B:
'file_name_2012'
das sei nur ein Beispiel ...
gibt es eine Möglichkeit diese Cells abzugleichen ohne in Schleifen die Strings in Cell A erst in Tokens aufzuspalten und dann zu vergleichen?
Achja STRCMP() funktioniert auch nicht, weil die Strings vor "_xxx.xxx" nicht immer gleich lang sind.
Ich hoffe das war einigermaßen verständlich erklärt
Vielen Dank schonmal!
|
|
|
|
|
|
| flashpixx |

Forum-Guru
|
 |
Beiträge: 355
|
 |
|
 |
Anmeldedatum: 19.04.08
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 13.06.2012, 16:33
Titel:
|
 |
|
Benutze reguläre Ausdrücke um zu vergleichen, ggf können die deal und cellfun dabei ebenso helfen
|
|
|
|
| geieraffe |
Themenstarter

Forum-Fortgeschrittener
|
 |
Beiträge: 97
|
 |
|
 |
Anmeldedatum: 19.04.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 14.06.2012, 08:07
Titel:
|
 |
hmm, ich weiß nicht ganz wie.
leider hilft mir das nicht beim "abschneiden" der Strings ...
momentan hab ich es jetzt so gelöst:
aber ich kann eben leider nicht 100%ig davon ausgehen, dass die Strings in dataset_namesA immer alle gleich lang sind.
|
|
|
|
| Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 14.06.2012, 08:35
Titel: Re: String-Cells vergleichen
|
 |
Hallo geieraffe,
Bitte gib ein konktretes Beispiel an, welches die erforderlichen Details enthält.
Eine Schleife und STRNMCP (nicht STRCMP!) ist wahrscheinlich effizient und übersichtlich.
Gruß, Jan
|
|
|
|
| geieraffe |
Themenstarter

Forum-Fortgeschrittener
|
 |
Beiträge: 97
|
 |
|
 |
Anmeldedatum: 19.04.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 14.06.2012, 09:47
Titel:
|
 |
ok hier mal ein Bsp.:
Momentan löse ich das so:
aber schon mit dem oben erwähnten Beispiel geht das schief, weil nicht alle Strings die Länge des ersten Eintrags haben und '2012_06_01_AAB_dumb.mat' und '2012_06_01_AA_dumb.mat' beide auf '2012_06_01_AA' "abgeschnitten werden".
|
|
|
|
| _Peter_ |

Moderator
|
 |
Beiträge: 537
|
 |
|
 |
Anmeldedatum: 08.12.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: 7.10, 2010a
|
 |
|
|
 |
|
Verfasst am: 14.06.2012, 10:21
Titel:
|
 |
Hallo geieraffe,
du könntest auch findstr nutzen.
Beispiel
Wenn du eine Zahl zurück bekommst, weißt du dass der string enthalten ist.
_________________
Gruß
Peter
_________________
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht? Oder der MATLAB Hilfe?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
|
|
|
|
| geieraffe |
Themenstarter

Forum-Fortgeschrittener
|
 |
Beiträge: 97
|
 |
|
 |
Anmeldedatum: 19.04.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 14.06.2012, 13:31
Titel:
|
 |
| _Peter_ hat Folgendes geschrieben: |
Hallo geieraffe,
du könntest auch findstr nutzen.
Beispiel
Wenn du eine Zahl zurück bekommst, weißt du dass der string enthalten ist. |
muss ich dabei aber nicht beide Cells auch wieder in 2 Schleifen durchlaufen? Das will ich näml vermeiden, sonst könnt ich ja auch die Cell mit den längeren Strings einmal durchlaufen, sie mit Hilfe von "_" in tokens zerlegen, neu zusammensetzten ... dann hab ich ja die exakten Namen.
|
|
|
|
| _Peter_ |

Moderator
|
 |
Beiträge: 537
|
 |
|
 |
Anmeldedatum: 08.12.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: 7.10, 2010a
|
 |
|
|
 |
|
Verfasst am: 15.06.2012, 06:46
Titel:
|
 |
Oh... das Detail ohne Schleife hat mein Hirn übersehen... dann würde ich das wie vorgeschlagen mit regexp lösen:
_________________
Gruß
Peter
_________________
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht? Oder der MATLAB Hilfe?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
|
|
|
|
| geieraffe |
Themenstarter

Forum-Fortgeschrittener
|
 |
Beiträge: 97
|
 |
|
 |
Anmeldedatum: 19.04.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 15.06.2012, 08:47
Titel:
|
 |
Hallo Peter,
vielen Dank für den Vorschlag, aber das geht so leider nicht
|
|
|
|
| Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 15.06.2012, 09:14
Titel:
|
 |
Hallo geieraffe,
Es ist praktischer, wenn Du für Code-Beispiele die regulaäre Matlab-Syntax verwendest. Ich gehe davon aus, dass in der Cell noch Quotes um die Strings eingefügt werden müssen. Das ist zwar nur eine Kleinigkeit, aber es ist effizienter, wenn der Fragesteller dies erledigt, und nicht jeder Anwtortende.
Es fehlt noch eine Erklärung, was Du als Ausgabe wünschst. Was genau soll passieren, wenn Du nach "AA" suchst und die Strings "AA" und "AAB" vorhanden sind? Folgt in den Namen immer ein Underscore, so dass man eigentlich nach "AA_" suchen könnte?
Je präziser eine Problem formuliert ist, desto leichter ist die Lösung.
Gruß, Jan
|
|
|
|
| _Peter_ |

Moderator
|
 |
Beiträge: 537
|
 |
|
 |
Anmeldedatum: 08.12.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: 7.10, 2010a
|
 |
|
|
 |
|
Verfasst am: 15.06.2012, 09:37
Titel:
|
 |
| geieraffe hat Folgendes geschrieben: |
Hallo Peter,
vielen Dank für den Vorschlag, aber das geht so leider nicht
|
Dann müsstest du mal zeigen, wie du das gemacht hast.
Wenn ich dein Beispiel durchlaufen lasse:
Dann funktionier das ohne Probleme...
Oder du versuchst den Vorschlag von Jan.
_________________
Gruß
Peter
_________________
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht? Oder der MATLAB Hilfe?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
|
|
|
|
| geieraffe |
Themenstarter

Forum-Fortgeschrittener
|
 |
Beiträge: 97
|
 |
|
 |
Anmeldedatum: 19.04.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 15.06.2012, 09:38
Titel:
|
 |
| |
 |
|
Sorry wenn ich mich ungenau ausgedrückt habe, das ist natürlich keine Absicht.
Und ja, du hast natürlich recht, da sollten noch qutes sein. hab ich beim schnellen Abtippen wohl vergessen, da diese im Workspace Editor ja nicht angezeigt werden.
| Jan S hat Folgendes geschrieben: |
Folgt in den Namen immer ein Underscore, so dass man eigentlich nach "AA_" suchen könnte?
|
Ein Underscore folgt immer, allerdings sind die Kürzel danach nicht einheitlich. Das sind Kürzel mit 4 Großbuchstaben.
Das davor ist ein Zeitstempel, leider nicht nur mit Datum, sondern auch mit Stunden und Minuten, weshalb alles vor dem Kürzel auch unterschiedlich ist.
dir_names ist die größere Menge, dataset_names ist eine Schnittmenge von dir_names, alle "Namen" die in dataset_names stehen, sind auch in dir_names ...allerdings eben mit einem "Anhängsel" wie zB. "_dumb.mat".
funktiniert leider nicht, sorry da hab ich mich wieder blöd ausgedrückt.
"dumb" ist nicht immer "dumb", korrekt wäre '_*.mat'.
die hab ich leider noch nicht verstanden, aber sie macht jeden falls nicht das was ich gerne hätte
Was ist am Ende haben will, ist ein Cell mit Strings in dem die Schnittmenge der beiden ist.
Es sollen also in "dataset_names" nur noch die Strings stehen bleiben die auch in "dir_names" sind.
|
|
|
|
| geieraffe |
Themenstarter

Forum-Fortgeschrittener
|
 |
Beiträge: 97
|
 |
|
 |
Anmeldedatum: 19.04.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 15.06.2012, 09:40
Titel:
|
 |
| _Peter hat Folgendes geschrieben: |
Dann müsstest du mal zeigen, wie du das gemacht hast. |
Vielen Dank Peter,
Ich hab deine Lösung auch versucht, allerdings sind meine beiden Cells nicht gleich lang (war im Beispiel von mir schlecht angegeben, sorry).
|
|
|
|
| Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 15.06.2012, 09:51
Titel:
|
 |
Hallo geieraffe,
[uqote]Es sollen also in "dataset_names" nur noch die Strings stehen bleiben die auch in "dir_names" sind.[/quote]
Die 2. Lösung hat nicht die Strings, sondern nur die entsprechenen Indices erstellt. Die Strings lassen sich aber leicht daraus erhalten:
Hilft dies nun?
Gruß, Jan
|
|
|
|
| geieraffe |
Themenstarter

Forum-Fortgeschrittener
|
 |
Beiträge: 97
|
 |
|
 |
Anmeldedatum: 19.04.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 15.06.2012, 10:14
Titel:
|
 |
Besten Dank!
Das mit den Indices hatte ich verstanden, aber ich hatte einen Fehler meinerseits übersehen, warum ich in match trotzdem nur false-Einträge hatte.
Funktioniert jetzt aber wunderbar.
Zwar mit Schleife, aber weit weniger aufwändig und sicherer als meine bisherige Lösung!
|
|
|
|
|
Gehe zu Seite 1, 2 Weiter
|
|
Einstellungen und Berechtigungen
|
|
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
| 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.
|
|