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

??? Undefined function or method 'regexp' for input argument

 

kilkenny
Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 19.01.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.01.2011, 22:16     Titel: ??? Undefined function or method 'regexp' for input argument
  Antworten mit Zitat      
Hallo zusammen,

bin gerade dran mein Programm auszutesten, wobei bei der Benutzung von "regexp" immer die Fehlermeldung
Code:

??? Undefined function or method 'regexp' for input arguments of type 'double'.

Error in ==> cutoutuni at 44
    first_word = regexp(tline, '[a-z]+', 'match', 'once');
 

kommt. Bei der Vorversion meines Programmes war dies allerdings nicht der Fall, weswegen es nicht an der fehlenden Toolbox liegen kann.
Tippe ich im Workspace "which regexp" ein findet MATLAb auch einen Pfad, nämlich
Code:

built-in (/Applications/MATLAB_R2010a.app/toolbox/matlab/strfun/@char/regexp)  % char method
 

Bin mit meinem Latein jetzt leider echt am Ende. Komischerweise lief das Programm in der Uni, auf meinem Heimrechner aber nicht....

Hier der Code:
Code:

%%.ps4 importieren
    fid = fopen('/Users/.............../500.ps4','r');
         if fid < 0, error('Das File ist nicht vorhanden');
         end
    txt = fscanf(fid, '%s');  % Einlesen der Textdatei als String
   
 %%%%%%%%%%%%%%
names = {'orbit', 'frame', 'time', 'tape', 'date'};
for i = 1: 10
    tline = fgetl(fid);
    first_word = regexp(tline, '[a-z]+', 'match', 'once');
    if ismember(first_word, names)
        value = regexp(tline, '([A-Z]|[0-9]+)(.|:)?[0-9]+((.|:)?[0-9]+|\s?[A-Z]*)', 'match', 'once');
        informations.(first_word) = value;
    end
end
fclose(fid);
disp(informations);
%%%%%%%%%%%%%%%%
satellite2 = 'ERS-2'
    satellite = regexp(tline,'(ERS-(\d*))','tokens'); % Satellit suchen
    satellite = [satellite{:}]
    if strcmp(satellite, satellite2) >=1
        satellite= 'ERS2'                           % Satellitenabkürzung formatieren
    else satellite ='ERS1'
    end

fclose(fid);
disp(informations);
 


Wäre euch allen sehr sehr dankbar, wenn ihr mir weiterhelfen könntet!!!
Schönen Resrsonntag noch!

Viele Grüße

Kilkenny
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 23.01.2011, 22:43     Titel:
  Antworten mit Zitat      
Hallo,

schau doch mal (ggf. mit dem Debugger), was der Wert von tline ist, wenn das Programm aussteigt. Vermutung: es konnte die Datei nicht lesen oder ist an ihr Ende gelangt. Könnte man mit isempty, angewandt auf tline, oder mit feof, angewandt auf fid, testen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
kilkenny
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 19.01.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.01.2011, 23:03     Titel:
  Antworten mit Zitat      
Hallo Harald,
vielen Dank erst Mal für deine schnelle Antwort!
Hab das ganze ausprobiert und bekommen
Code:

>> isempty(tline)

ans =

     0

>> feof(fid)

ans =

     1
 

raus.
Durchsuche ich das File mit Tokens
Code:

%%.ps4 importieren
    fid = fopen('/Users/.........../1_1.ps4','r');
         if fid < 0, error('Das File ist nicht vorhanden');
         end
    txt = fscanf(fid, '%s');  % Einlesen der Textdatei als String
   
   
   
   
   
   
   
   
   
   
      satellite2 = 'ERS-2'
    satellite = regexp(txt,'(ERS-(\d*))','tokens'); % Satellit suchen
    satellite = [satellite{:}]
    if strcmp(satellite, satellite2) >=1
        satellite= 'ERS2'                           % Satellitenabkürzung formatieren
    else satellite ='ERS1'
    end
   
    orbit = regexp(txt,'orbit:(\d*)','tokens'); % Orbit suchen
    orbit = [orbit{:}]
 

funktioniert alles tadellos.
Ich hab erst vor 2 Wochen mit Matlab angefangen und bin deswegen noch sehr unbeholfen mit allem.

Vielen Dank dir!!

Kilkenny
Private Nachricht senden Benutzer-Profile anzeigen
 
_Peter_
Moderator

Moderator


Beiträge: 537
Anmeldedatum: 08.12.10
Wohnort: ---
Version: 7.10, 2010a
     Beitrag Verfasst am: 24.01.2011, 10:22     Titel:
  Antworten mit Zitat      
Hallo kilkenny,
du hast ein paar Fehler noch in deinem Code.

Zum einen zu deinem Problem, folgende Zeile nutzt du überhaupt nicht:
Zitat:
Code:

txt = fscanf(fid, '%s');  % Einlesen der Textdatei als String
 

Die Variable txt wird nicht genutzt bei dir. Wenn du diese Zeile löschst(du brauchst sie ja eh nicht) dann funktioniert der Code wieder. Ich bin mir nicht sicher warum fscanf da was verändert, aber es scheint so, dass das das Problem ist.

Weiterhin hast du mehrmals ein fclose drin. Dabei brauchst du nur einmal die Datei schließen.
Ich habe den Code mal glatt gezogen:

Code:

%%.ps4 importieren
fid = fopen('test.txt','r');
if fid < 0
    error('Das File ist nicht vorhanden');
end
%%%%%%%%%%%%%%
names = {'orbit', 'frame', 'time', 'tape', 'date'};
for i = 1: 10
    tline = fgetl(fid);
    first_word = regexp(tline, '[a-z]+', 'match', 'once');
    if ismember(first_word, names)
        value = regexp(tline, '([A-Z]|[0-9]+)(.|:)?[0-9]+((.|:)?[0-9]+|\s?[A-Z]*)', 'match', 'once');
        informations.(first_word) = value;
    end
end
%%%%%%%%%%%%%%%%
satellite2 = 'ERS-2';
satellite = regexp(tline,'(ERS-(\d*))','tokens'); % Satellit suchen
satellite = [satellite{:}];
if strcmp(satellite, satellite2) >=1
    satellite = 'ERS2';                       % Satellitenabkürzung formatieren
else
    satellite ='ERS1';
end

fclose(fid);
disp(informations);
disp(satellite);
 

_________________

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?
Private Nachricht senden Benutzer-Profile anzeigen
 
kilkenny
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 19.01.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.01.2011, 22:22     Titel:
  Antworten mit Zitat      
Man es tut mir echt Leid dir nochmal schreiben zu müssen....
Hab jetzt alles so reinkopiert, wie dus mir vorbereitet hast. habe auch die:

%txt = fscanf(fid, '%s');

auskommentiert.
Das Problem ist nur, dass früher in txt, auch wenn ich es nicht benützt habe, die ganze Datei als .txt vorhanden war.
Code:

>> whos txt
  Name      Size                   Bytes  Class    Attributes

  txt       1x2767525            5535050  char    
 

Schaue ich jetzt nach tline bekomme ich schlicht nur:
Code:

>> whos tline
  Name       Size            Bytes  Class    Attributes

  tline      1x16               32  char        
 

weswegen MATLAB glaube ich gar nichts mehr mit anfangen kann.
Deswegen erscheint jetzt immer der Fehler:
Code:

??? Undefined function or variable 'informations'.

Error in ==> cutoutuni at 60
disp(informations);
 

first_word ist jetzt "ages" was von "%%Pages: (atend)" kommt, und der einzige Eintrag in tline ist.
value ist gar nicht vorhanden. Demnach kann MATLAB das file also nicht richtig einlesen.
Hast du eine Idee, und ich hoffe wirklich, dass es das letzte Mal ist und ich die ganze Geschichte abhaken kann!!
Kann hier leider keine .ps4 Datei hochladen...
Vielen Dank dafür!

Kilkenny
Private Nachricht senden Benutzer-Profile anzeigen
 
_Peter_
Moderator

Moderator


Beiträge: 537
Anmeldedatum: 08.12.10
Wohnort: ---
Version: 7.10, 2010a
     Beitrag Verfasst am: 25.01.2011, 10:02     Titel:
  Antworten mit Zitat      
Hallo kilkenny,
Zitat:

Man es tut mir echt Leid dir nochmal schreiben zu müssen....

Kein Problem. Und nebenbei, du schreibst nicht nur mir sondern dem ganzen Forum Wink

Zitat:

Das Problem ist nur, dass früher in txt, auch wenn ich es nicht benützt habe, die ganze Datei als .txt vorhanden war.

Das verstehe ich nicht. Wieso ist das ein Problem wenn du es eh nie benutzt?? Wenn ich etwas nicht brauche entferne ich es und es ist somit auch kein Problem.

Zitat:

first_word ist jetzt "ages" was von "%%Pages: (atend)" kommt, und der einzige Eintrag in tline ist.

Vielleicht, hätte ich den Code kommentieren sollen, oder du die Hilfe zu den Befehlen lesen.


fgetl gibt dir immer nur eine Zeile aus der Textdatei zurück. Das heißt, dass du mit diesem Befehl immer nur eine Zeile in tline hast. Deswegen musst du das in einer Schleife abhandeln.
Da ich die ps4 Datei nicht kenne, habe ich einfach mal eine Schleife mit 10 Durchläufen gemacht. Ich nehme einfach an, dass in den ersten 10 Zeilen der Datei nicht die gesuchten Begriffe stehen und somit keine Werte ausgefiltert werden.
Deswegen musst du wohl eine Endlosschleife programmieren mit entsprechender Abbruchbedingung.
In der Hilfe zu fopen hast du ein Beispiel welches du direkt anwenden kannst.

Code:

fid = fopen('fgetl.m');
while 1
    tline = fgetl(fid);
    if ~ischar(tline),   break,   end
    disp(tline)
end
fclose(fid);
 

_________________

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?
Private Nachricht senden Benutzer-Profile anzeigen
 
kilkenny
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 19.01.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.01.2011, 17:47     Titel:
  Antworten mit Zitat      
hey Peter,
vielen Dank für alles, hat alles super geklappt!!!
Ist es üblich hier den finalen Programmcode zu posten?


Viele Grüße

Kilkenny
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: 31.01.2011, 19:25     Titel:
  Antworten mit Zitat      
Hallo kilkenny,

Zitat:
Ist es üblich hier den finalen Programmcode zu posten?

Auf jeden Fall wäre es hilfreich! 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 - 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.