% 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=[];
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.
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:
% 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) ifisempty(key{j})
counter=counter+1;
continue elseif(~isempty(key{j}) && sum(size(key{j}) > 1)) <= 1
counter=counter+1;
break end end
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
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
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.
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?
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?
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
Hallo!
Ah ok, verstehe.
Ich habe das jetzt so schon hinbekommen, dieses Forum hier ist ja echt klasse.
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ß
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
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.