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

Mehrere Dateien nach einem String durchsuchen

 

Labida
Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 18.04.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.04.2010, 12:45     Titel: Mehrere Dateien nach einem String durchsuchen
  Antworten mit Zitat      
Hallo Forum!
Mit eurer netten Hilfe habe ich bisher folgendes Skript erstellen können:
Code:

rawdata=[];
[filename, path, filterindex] = uigetfile( ...
{  '*.mka','MKA-files (*.mka)'; ...
   '*.*',  'All Files (*.*)'}, ...
   'Bitte Dateien auswählen', ...
   'MultiSelect', 'on');

% wenn filename nicht cell, dann mache eins
if ~iscell(filename)
   filename={filename};
end

i = numel (filename);
for index =1:1:i
    fid=fopen(fullfile(path,filename{index}),'r');
    rawdata{index}=textscan(fid,'%s','Delimiter','\n');
    lengthmat{index}=size(rawdata{1,index}{1,1});
    length(index)=lengthmat{1,index}(1,1);
    startingpoint=[];
   
    data{index}=textscan(fid,'%f','headerlines',98);
     
end
fclose(fid);
 


Nun möchte ich gerne eine Funktion einbauen, die alle ausgewählten Dateien nach einem bestimmten String durchsucht, und dann die Zeilenzahl zurückgibt, damit ich dann mit textscan zur (Zeilenzahl+1)ten Zeile springen kann und dann diese Dateien auslesen kann.
Ich habe mir sowohl regxp, strfind und strmatch angeschaut. Ich glaube regxp ist der Befehl den ich brauche nur komme ich mit der Bedienung noch nicht zurecht.
Private Nachricht senden Benutzer-Profile anzeigen


Labida
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 18.04.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.04.2010, 15:57     Titel:
  Antworten mit Zitat      
So ich habe nun noch weiter an dem Skript gebastelt. Die Suchfunktion funktioniert schon sehr gut, ich bekomme die Zeile, in der das Datenauslesen beginnen soll heraus. Das Skript möchte ich euch natürlich nicht vorenthalten:
Code:

rawdata=[];
[filename, path, filterindex] = uigetfile( ...
{  '*.mka','MKA-files (*.mka)'; ...
   '*.*',  'All Files (*.*)'}, ...
   'Bitte Dateien auswählen', ...
   'MultiSelect', 'on');

% wenn filename nicht cell, dann mache eins
if ~iscell(filename)
   filename={filename};
end

i = numel (filename);
for index = 1:1:i
    fid=fopen(fullfile(path,filename{index}),'r');
    rawdata{index}=textscan(fid,'%s','Delimiter','\n');
    lengthmat{index}=size(rawdata{1,index}{1,1});
    length(index)=lengthmat{1,index}(1,1);
    counter=0;
    key=regexpi(rawdata{1,index}{1},'Zahn-Nr.: 1');
    for j=1:1:length(index)
         if isempty(key{j})
             counter=counter+1;
             continue
         elseif (~isempty(key{j}) && sum(size(key{j}) > 1)) <= 1
             counter=counter+1;
             break
         end
     end
                   
           
     startingpoint{index}=counter+1;
     data{index}=textscan(fid,'%f','headerlines',startingpoint{index});
   
end
fclose(fid);
 


Nun gibt es noch 2 Probleme:
1) Was kann man machen, damit zum Beispiel Suchergebnise wie "Zahn-Nr.: 10" bei Eingabe von "Zahn-Nr.: 1" überlesen werden und wirklich nur der eingegebene String ausgelesen wird?
2) data liest die Daten nicht mehr aus. Hat da wer eine Idee woran das liegen könnte?

Edit: Ich habe den Post geändert, bitte nicht wundern Smile
Wie genau funktioniert denn find? Geht das nur über DOS oder ist das ein befehl von matlab. In der Help habe ich nur ein find gefunden, welches Zahlen zurückgibt. Wie könnte ich denn find implementieren?

Zuletzt bearbeitet von Labida am 21.04.2010, 17:18, insgesamt 2-mal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
outsider
Forum-Meister

Forum-Meister


Beiträge: 806
Anmeldedatum: 03.09.07
Wohnort: München
Version: R2012b
     Beitrag Verfasst am: 21.04.2010, 17:03     Titel:
  Antworten mit Zitat      
Wieso verwendest Du nicht das DOS Kommando FIND.
Damit kann man schnell auch innerhalb Dateien nach Stringketten suchen. Somit ersparst Du Dir auch den ganzen code und es wird viel schneller sein...

Code:
C:\>find /?
Sucht in einer oder mehreren Dateien nach einer Zeichenfolge.



MfG
Private Nachricht senden Benutzer-Profile anzeigen
 
Labida
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 18.04.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.04.2010, 09:32     Titel:
  Antworten mit Zitat      
Wie genau funktioniert denn find? Geht das nur über DOS oder ist das ein befehl von matlab. In der Help habe ich nur ein find gefunden, welches Zahlen zurückgibt. Wie könnte ich denn find implementieren?

Nun habe ich noch 2 Probleme:
1) Was kann man machen, damit zum Beispiel Suchergebnise wie "Zahn-Nr.: 10" bei Eingabe von "Zahn-Nr.: 1" überlesen werden und wirklich nur der eingegebene String ausgelesen wird?
2) data liest die Daten nicht mehr aus. Hat da wer eine Idee woran das liegen könnte?
Private Nachricht senden Benutzer-Profile anzeigen
 
Labida
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 18.04.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.04.2010, 17:37     Titel:
  Antworten mit Zitat      
Hallo Forum,
hat keiner eine Idee woran es liegen könnte, dass Textscan nicht funktioniert?
Auch habe ich leider noch keine Lösung gefunden, um falsche Suchergebnise zu unterdrücken, zum Beispiel wenn ich nach "Zahn-Nr.: 1" suche, dass "Zahn-Nr.: 10" nicht beachtet wird?
Wie kann ich denn find in eine matlab Datei implementieren, ich habe find bisher nicht genutzt weil ich ja nicht nur nach bestimmten Strings suchen möchte, sondern in der darauffolgenden Zeile anfangen möchte Daten zu lesen, und da ich eher noch ein Programmieranfänger bin kannte ich find nicht. Gibt es eine Möglichkeit find so zu implementieren, sodass die gewünschte Funktionalität gewährleistet wird?
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 26.04.2010, 19:13     Titel:
  Antworten mit Zitat      
Hallo

outsider hat unter find DOS-Befehl gemeint:
Code:


rawdata=[];
[filename, path, filterindex] = uigetfile( ...
{  '*.mka','MKA-files (*.mka)'; ...
   '*.*',  'All Files (*.*)'}, ...
   'Bitte Dateien auswählen', ...
   'MultiSelect', 'on');

% wenn filename nicht cell, dann mache eins
if ~iscell(filename)
   filename={filename};
end

i = numel (filename);
for index = 1:1:i
    datei = fullfile(path,filename{index});
    [found,res]=system(sprintf('find "%s" %s','Zahn-Nr.: 1',datei));

   if found==0
     disp(['Zahn wurde in  ', filename{index},' gefunden'])
   end

end

 


Zu regulären Ausdruck ist schwierig eine Aussage zu machen,
weil du muss schon der Beispiel- Satz posten, wo Zahn 1 und Zahn 10 vorkommen. Man muss ja Unterschied feststellen

probiere aber folgendes:
Code:

key=regexpi({'Zahn-Nr.: 10','Zahn-Nr.: 1'},'Zahn-Nr.: 1$')
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Labida
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 18.04.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.04.2010, 13:31     Titel:
  Antworten mit Zitat      
Hallo!
Ah ok, verstehe. Smile
Ich habe das jetzt so schon hinbekommen, dieses Forum hier ist ja echt klasse. Very Happy
Langsam fängts an Spaß zu machen.
Anscheinend stört er sich daran innerhalb des Programms die fid 2mal zu verwenden, weshalb ich diese nun abgeändert habe. Nun funktioniert alles.

Auch beim Problem mit der Suche ist mir etwas eingefallen: Und zwar muss ich einfach nach dem einzugebenden String matlab immer noch ein Leerzeichen schreiben lassen, dann sucht er exakt nach diesem String. Das werde ich dann aber auch erst mit der GUI impelmentieren.

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