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

Suchfunktion für Listbox

 

Tiko18
Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 01.07.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.07.2008, 15:16     Titel: Suchfunktion für Listbox
  Antworten mit Zitat      
Hallo Leute,

ich bin noch recht neu in der Matlab Programmierung. Meine Frage ist vielleicht für viele hier ein viel zu einfaches Problem. Also es geht um folgendes:

Ich hab folgende Dateien:

080521_100818_-_1812.31.00_-_capacitance
080521_100818_-_1812.31.00_-_capacitance_zoom
080521_100818_-_1812.31.00_-_data_d
080521_100818_-_1812.31.00_-_impedance
080521_100818_-_1812.31.00_-_impedance_complex
080521_100818_-_1812.31.00_-_resonance-frequency

080521_101253_-_1812.31.01_-_capacitance
080521_101253_-_1812.31.01_-_capacitance_zoom
080521_101253_-_1812.31.01_-_data_d
080521_101253_-_1812.31.01_-_impedance
080521_101253_-_1812.31.01_-_impedance_complex
080521_101253_-_1812.31.01_-_resonance-frequency

Die Liste geht so weiter mit 02, 03, 04, 05, 06 etc.
Ich hab eine Listbox gemacht in der nun
1812.31.00, 1812.31.01, 1812.31.02, 1812.31.03, 1812.31.04 etc einmal angezeigt werden sollen.

Meine Idee, die Zeichenfolge "_-_" als Trennzeichen zu verwenden und z.B. nach "capacitance" zu suchen und 1812.30.00, 1812.31.01, 1812.31.02, 1812.31.03, 1812.31.04 etc. auf der Listbox anzuzeigen.

Ich weiß allerdings nicht wie ich es programmieren soll. Hab schon einiges Probiert, aber es klappt nicht.
Wäre nett wenn mir jemand weiterhelfen könnte.

Gruß Tiko 18
Private Nachricht senden Benutzer-Profile anzeigen


Neuling

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.07.2008, 16:00     Titel:
  Antworten mit Zitat      
Ich bin auch relativ neu in der Matlab-Programmierung und habe ein aehnliches Problem.
Dein Problem ist mir nicht ganz klar. Du koenntest allerdings die einzelnen Teilstrings der Dateinamen in eine Struct speichern, und dann nur das Feld mit den entsprechenden Zahlen darstellen lassen. Eine andere Idee hab ich leider auch nicht! Sad
Damit waeren wir auch schon bei meinem Problem. Ich verwend zur Zeit so eine Struct, mit verschiedenen Feldern fuer Messgroessen wie zum Beispiel label und unit. In einer Listbox werden alle Label dargestellt. Ich haette jetzt gerne, dass, wenn man ein Label in der Listbox auswaehlt, in einem weiteren Feld der struct (z. B. selected) eine 1 eingetragen wird, sonst 0. Ich hab aber keine Ahnung, wie ich das loesen kann, da ich ja nur das label weiss. Meine Frage ist also, wie kann ich auf die anderen Felder zugreifen, wenn ich das label habe? Oder hat jemand eine andere Idee, wie ich alle ausgewaehlten Groessen mit allen Feldern finden kann? Es sind ueber 16000 Groessen, weswegen ich ungern Schleifen verwenden wuerde, die alle Groessen durchsuchen, da das doch erheblich Zeit kostet.
Ich denke, mein Problem ist aehnlich dem von Tiko18. Vielleicht kann uns ja jemand helfen. Vielen Dank schonmal!

Liebe Gruesse!
 
dib0r
Forum-Guru

Forum-Guru


Beiträge: 413
Anmeldedatum: 09.05.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.07.2008, 17:57     Titel:
  Antworten mit Zitat      
@Tiko

Ich befürchte ich verstehe dein Problem nicht ganz; ich versuche mich aber trotzdem Smile

Falls du einen String in einem Cell-array (Liste aus Strings) suchen willst
Code:
Falls du eine Zeichenkette in einem String suchen willst
Code:
Falls du aus mehreren Strings einen neuen basteln willst
Code:
oder
Code:


Wenn ich das richtig verstehe willst du zum einen in der Listbox die "Zahl" (z.B. 1812.31.00) auswählen und dir danach den dazugehörigen Dateinamen mit Suffix "capitance" (o.ä.) zusammenbasteln (wie gesagt - ich befürchte Du willst was anderes, ist mir aber noch nicht klar was genau).

Code:
prefix = '080521_100818_-_';
sep = '_-_';
% Code der Listbox, gibt str zurück;

fileName = strcat(prefix,sep,str);


MfG
Private Nachricht senden Benutzer-Profile anzeigen
 
dib0r
Forum-Guru

Forum-Guru


Beiträge: 413
Anmeldedatum: 09.05.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.07.2008, 18:09     Titel:
  Antworten mit Zitat      
@ Neuling

Wenn ich das richtig verstehe, willst du von einem Feld einer Struktur auf die Struktur schliessen. Ich befürchte dass dies nicht so einfach geht (wer will mich eines Besseren belehren? ^^). Wie sehen deine Strukturen denn aus?

Wenn sie beispielsweise der Reihe nach geordnet sind (für die Ausgabe in der Listbox!), dann kannst du natürlich den Index verwenden.

Code:
stru(1).label = '123';
stru(1).unit = 'abc';
str(2).label = '456';
stru(2).unit = 'def';

[...]

% index wird von der Listbox zurückgegeben
stru(index).selected = 1;


Du könntest ansonsten parallel eine Liste der Indizes mitlaufen lassen und entsprechen mit
Code:
stru(liste_indizes(index)).selected = 1;
drauf zugreifen.

Was mir sonst noch so einfällt ist dass du dir eine eigene Funktion schreibst, die analog zu der Listbox aufgebaut ist, die Strukturen anstelle von Strings als Eingabeargument zulässt und die Anzeige eines bestimmten Feldes zulässt.

MfG
Private Nachricht senden Benutzer-Profile anzeigen
 
Neuling

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.07.2008, 18:20     Titel:
  Antworten mit Zitat      
Danke fuer deine Antwort dib0r!

Die Idee, die Indizes zu verwenden ist gut. Frag mich, warum ich da nicht selbst draufgekommen bin.... Ist aber denk ich auch nicht soo einfach in meinem Fall, da die Reihenfolge in der Listbox geaendert werden kann. Das hat mir aber sowieso nicht so gut gefallen, also werde ich das wohl dahingehend aendern, dass die Reihenfolge immer gleich ist!
Ich hoffe ich bekomme das hin.
Vielen Dank nochmal!
 
Tiko18
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 01.07.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.07.2008, 18:41     Titel:
  Antworten mit Zitat      
dib0r hat Folgendes geschrieben:
@Tiko

Ich befürchte ich verstehe dein Problem nicht ganz; ich versuche mich aber trotzdem Smile

Falls du einen String in einem Cell-array (Liste aus Strings) suchen willst
Code:
Falls du eine Zeichenkette in einem String suchen willst
Code:
Falls du aus mehreren Strings einen neuen basteln willst
Code:
oder
Code:


Wenn ich das richtig verstehe willst du zum einen in der Listbox die "Zahl" (z.B. 1812.31.00) auswählen und dir danach den dazugehörigen Dateinamen mit Suffix "capitance" (o.ä.) zusammenbasteln (wie gesagt - ich befürchte Du willst was anderes, ist mir aber noch nicht klar was genau).

Code:
prefix = '080521_100818_-_';
sep = '_-_';
% Code der Listbox, gibt str zurück;

fileName = strcat(prefix,sep,str);


MfG


Laughing

Danke für deine Antwort dib0r,

ich versuch es jetzt etwas besser zu formulieren. Ich hab die gesamten Dateien oben in einem Ordner. Jetzt will ich in meine Listbox folgendes 1812.31.00, 1812.31.01, 1812.31.02, 1812.31.03, 1812.31.04, 1812.31.05 etc. in eine Listbox angezeigt bekommen. Das soll möglichst automatisch sein d.h. ich will nicht prefixe angeben müssen, denn es sind unmengen an Daten. (Deswegen hatte ich mir das mit den Trennzeichen überlegt und der Suchfunktion, damit ich nur die capacitance Datei habe. Denn die werde ich später weiterverwenden). Wenn ich neue Daten haben, will ich sie nur in den Ordner Kopieren und mit starten des Programms, sie in meiner Listbox sehen können.

Das mit der Suchoption war nur eine mögliche idee von mir.
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 03.07.2008, 09:01     Titel:
  Antworten mit Zitat      
Moin,

wenn ich das jetzt richtig verstanden habe, dann suchst du wahrscheinlich etwas in der Form:
Code:
files = dir(*capacitance.txt) % wenn es sich um .txt-files handelt
for k=1:numel(files)
    tmp = textscan(files(k).name,'%s','delimiter','-')
    list{k} = {strrep(tmp{1}{2},'_','')};
end


Schau mal ob du damit weiterkommst...

Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
Tiko18
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 01.07.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.07.2008, 13:59     Titel:
  Antworten mit Zitat      
steve hat Folgendes geschrieben:
Moin,

wenn ich das jetzt richtig verstanden habe, dann suchst du wahrscheinlich etwas in der Form:
Code:
files = dir(*capacitance.txt) % wenn es sich um .txt-files handelt
for k=1:numel(files)
    tmp = textscan(files(k).name,'%s','delimiter','-')
    list{k} = {strrep(tmp{1}{2},'_','')};
end


Schau mal ob du damit weiterkommst...

Gruß
Alex


Razz Dank dir, die idee ist gut allerdings akzeptirt er bei mir den * bei *capacitance.txt als Platzhalter nicht. Gibs da eine ander möglichkleit?
Er bringt den Fehler: Unexpected matlab Operator.

Gruß Tiko
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.