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

Finden eines Wertes in cell-Vektor mit Ausgabe d. Zeilennumm

 

Llinus
Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 02.06.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.06.2014, 15:37     Titel: Finden eines Wertes in cell-Vektor mit Ausgabe d. Zeilennumm
  Antworten mit Zitat      
Liebe Matlab-Community,

ich habe einen Vektor der folgenden Form:

Mo 30.04.2012 1
Mo 30.04.2012 2
Mo 30.04.2012 ..
Mo 30.04.2012 24
Di 01.05.2012 1
Di 01.05.2012 2
Di 01.05.2012 ..
Di 01.05.2012 24
...

Ich möchte nun herausfinden in welcher Zeile "Di 01.05.2012 1" steht.

Kann mir bitte bitte jemand helfen?

Bestens, Llinus.
Private Nachricht senden Benutzer-Profile anzeigen


Nras
Forum-Meister

Forum-Meister


Beiträge: 608
Anmeldedatum: 21.02.12
Wohnort: ---
Version: 7.12.0.635 (R2011a)
     Beitrag Verfasst am: 13.06.2014, 16:35     Titel:
  Antworten mit Zitat      
Hallo,

es ist immer von Vorteil, wenn du die bereitgestellten infos schon mal bereistellst, dass man das direkt benutzen kann. Naja, die Lösung ist ein Einzeiler. Vielleicht geht auch was direkt mit strfind(), aber so geht es auch:
Code:
D = {'Mo 30.04.2012 1'
'Mo 30.04.2012 2'
'Mo 30.04.2012 ..'
'Mo 30.04.2012 24'
'Di 01.05.2012 1'
'Di 01.05.2012 2'
'Di 01.05.2012 ..'
'Di 01.05.2012 2'};
pattern = 'Di 01.05.2012 1';
find(strcmp(pattern,D))
 


Viele Grüße,
Nras.
Private Nachricht senden Benutzer-Profile anzeigen
 
Llinus
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 02.06.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.06.2014, 17:05     Titel:
  Antworten mit Zitat      
Hallo Nras,

hab tausend Dank für die schnell Antwort! Smile

Wenn ich nun allerdings nach nur nach "01.05.12 1" suchen möchte (also ohne, dass ich weiß, dass es ein Dienstag ist, was muss ich dann tun?

Ich dachte zuerst, dass ich D in char umwandeln könnte, um die Spaltennummern direkt ansprechen zu können, aber das geht leider nicht Sad

Viele Grüße, Llinus.

PS: mit den Daten versuche ich in Zukunft zu machen Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
Nras
Forum-Meister

Forum-Meister


Beiträge: 608
Anmeldedatum: 21.02.12
Wohnort: ---
Version: 7.12.0.635 (R2011a)
     Beitrag Verfasst am: 13.06.2014, 21:19     Titel:
  Antworten mit Zitat      
Hallo,

das geht (glaube ich) nicht ohne eine for-Schleife oder cellfun, da deine Strings nicht gleich lang sind. Daher hier meine Ideen:
Code:
D = {'Mo 30.04.2012 1'
'Mo 30.04.2012 2'
'Mo 30.04.2012 ..'
'Mo 30.04.2012 24'
'Di 01.05.2012 1'
'Di 01.05.2012 2'
'Di 01.05.2012 ..'
'Di 01.05.2012 2'};
pattern = '01.05.2012 1';

% einzeiler mit einer cellfun
find(cellfun(@(d) any(strfind(d, pattern)), D))

% als for-schleife
for i=1:length(D)
    d = D{i};
    if any(strfind(d, pattern))
        idx = i;
        break
    end
end

Wenn ein Datum mehr als ein mal auftreten kann, müsste man da noch was anpassen, ansonsten sollte das hinhauen.

Viele Grüße,
Nras.
Private Nachricht senden Benutzer-Profile anzeigen
 
Llinus
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 02.06.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.06.2014, 11:32     Titel:
  Antworten mit Zitat      
Hallo Nras,

vielen Dank für deine Antwort und den Code. Leider habe ich diesen nicht ganz verstanden sodass ich weiter herum probiert habe und nun auf die folgende Lösung gekommen bin, welche vermutlich genauso funktioniert und zudem ohne Schleifen auskommt.

Deine geht allerdings auch prima! (nur dass ich eben nicht verstehe, was da passiert). Dennoch Danke schön!

Code:
D = {...
'Mo 30.04.2012 1'
'Mo 30.04.2012 2'
'Mo 30.04.2012 ..'
'Mo 30.04.2012 24'
'Di 01.05.2012 1'
'Di 01.05.2012 2'
'Di 01.05.2012 ..'
'Di 01.05.2012 24'
};
D=char (D);
D=D(:,4:16);
D=cellstr(D);
pattern = '01.05.2012 24';

Ergebnis=find(strcmp(pattern,D))


Viele Grüße, Llinus.
Private Nachricht senden Benutzer-Profile anzeigen
 
Nras
Forum-Meister

Forum-Meister


Beiträge: 608
Anmeldedatum: 21.02.12
Wohnort: ---
Version: 7.12.0.635 (R2011a)
     Beitrag Verfasst am: 14.06.2014, 12:09     Titel:
  Antworten mit Zitat      
Hallo,

damit schneidest du die ersten 3 Chars ab, das ist genau das 'Mo ' bzw. das 'Di '. Dann funktioniert genau die Lösung, aus meinem ersten Beitrag, weil du wieder nach exakter Gleichheit suchen kannst und nicht nur nach einem Teilstring.
Das war genau das, was in der cellfun()-Lösung passiert.

Nach deiner Lösung kannst du dann natürlich nicht mehr mit dem uprsünglichen pattern mit Wochentagangabe suchen. Aber wenn das okay ist, dann ist ja alles gut.

Viele Grüße,
Nras.
Private Nachricht senden Benutzer-Profile anzeigen
 
Llinus
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 02.06.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.06.2014, 12:32     Titel:
  Antworten mit Zitat      
Genau Smile Dein erster Beitrag hat mir sehr geholfen! Danke nochmals
Private Nachricht senden Benutzer-Profile anzeigen
 
zohaa
Forum-Newbie

Forum-Newbie


Beiträge: 1
Anmeldedatum: 18.10.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.10.2014, 06:16     Titel:
  Antworten mit Zitat      
Hallo,

mit welcher MATLAB-Version arbeitest du?

Speicherst du die Datei im momentanen Verzeichnis?
_________________

zoha
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: 19.10.2014, 22:32     Titel:
  Antworten mit Zitat      
Hallo zohaa,

Zitat:
mit welcher MATLAB-Version arbeitest du?

Das spielt hier keine besondere Rolle.

Zitat:
Speicherst du die Datei im momentanen Verzeichnis?

Hier geht es nicht um ein File.

Gruß, Jan
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 - 2024 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.