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

regexp -Nachkommastellen lesen mit Hilfe regexp-

 

ruudrademakers
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 25.05.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.05.2012, 19:06     Titel: regexp -Nachkommastellen lesen mit Hilfe regexp-
  Antworten mit Zitat      
Hallo zusammen!

Ich komme gerade nicht weiter und würde mich richtig freuen wenn jemand weiter helfen könnte..

Im 'datafile' habe ich u.a. folgendes:
.....
.....
create numerical_parameter NSTEPS 8192
create numerical_parameter TIMESTEP 0.0205954
.....
.....

Jetzt möchte ich mit Hilfe 'fopen' und 'regexp' die NSTEP und TIMESTEP zugehörige Werten auslesen:
Leider krieg ich es nicht hin die Nachkommastellen zu laden..

Ergebnis:
nsteps =

8192


timestep =

0

Code:

%% LOAD DATA FROM CALCUL
function [nsteps, timestep] = loadcalcul()

% Import calcul.don of simulation
fid  = fopen('./datafile','r');
text = textscan(fid,'%s','Delimiter','');
text = text{1};
fid  = fclose(fid);

% Parse NSTEPS
nsteps = regexp(text,'NSTEPS[\s\.=]+(\d+)','tokens');
nsteps = [nsteps{:}]; nsteps = str2double([nsteps{:}]).';

% Parse TIMESTEP
timestep = regexp(text,'TIMESTEP[\s\.=]+(\w*)','tokens');
timestep = [timestep{:}]; timestep = str2double([timestep{:}]).';
 



Vielen Dank im Voraus für eure Hilfe!!
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: 25.05.2012, 20:28     Titel:
  Antworten mit Zitat      
Hallo,

ich würde es wieder mit \d+ statt \w* versuchen.
Davon abgesehen erscheinen mir reguläre Ausdrücke hier doch ein wenig als Overkill Wink

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

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 25.05.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.05.2012, 20:44     Titel:
  Antworten mit Zitat      
Danke, Harald für die Antwort..
Mit (\d+) ..sowie bei NSTEPS.. ändert sich leider nichts

Würde es gerne einfachen machen, bin aber leider kein MATLAB-Profi.. Hättest Du vllt ein Vorschlag?

Grüsse,
Ruud
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: 25.05.2012, 21:22     Titel:
  Antworten mit Zitat      
Hallo,

hier mein Vorschlag:

Code:
function [nsteps, timestep] = loadcalcul()

% Import calcul.don of simulation
fid  = fopen('./datafile','r');
text = textscan(fid,'%s');
text = text{1};
fid  = fclose(fid);

% Parse NSTEPS
I = 1;
while ~strcmp(text{I}, 'NSTEPS')
    I = I+1;
    if I > numel(text)
        error('String NSTEPS not found')        
    end
end
I = I+1;
nsteps = str2double(text{I});

I = 1; % nicht nötig, wenn sicher ist, dass N
% Parse TIMESTEP
while ~strcmp(text{I}, 'TIMESTEP')
    I = I+1;
    if I > numel(text)
        error('String TIMESTEP not found')
    end
end
I = I+1;
timestep = str2double(text{I});
 

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

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 25.05.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.05.2012, 12:28     Titel:
  Antworten mit Zitat      
Super!
Vielen vielen Dank,
und nen schönes WE, Ruud
Private Nachricht senden Benutzer-Profile anzeigen
 
Sirius3
Forum-Guru

Forum-Guru


Beiträge: 441
Anmeldedatum: 11.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.05.2012, 13:48     Titel:
  Antworten mit Zitat      
Hallo,

@Harald: reguläre Ausdrücke sind ideal, um aus großen Textmengen bestimmte
Muster zu finden.

In regulären Ausdrücken steht \d für eine beliebige Ziffer 0..9 und \w für einen Buchstabe
oder eine Ziffer (0..9, A..Z, a..z, _). Kommazahlen enthalten aber auch einen Punkt;-)
Code:
% Parse TIMESTEP
timestep = regexp(text,'TIMESTEP[\s=]+([-+eE0-9.]*)','tokens');
timestep = [timestep{:}]; timestep = str2double([timestep{:}]).';

In der obigen Variante wird jedes Zeichen das einer Kommazahl vorkommen darf, mitgenommen, also auch (-0.432e+30)

Grüße
Sirius
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: 26.05.2012, 16:02     Titel:
  Antworten mit Zitat      
Hallo Sirius,

sicher können reguläre Ausdrücke nützlich sein; ich habe sie selbst schon das eine oder andere Mal eingesetzt. Mir erscheint es jedoch immer eher mühsam, mich durch die Logik durchzuarbeiten und mich dann zu fragen, wieso nun doch wieder nicht das zurückkommt, was ich möchte.
Wenn es einen anderen, aus meiner Sicht einfacheren, Weg gibt, greife ich also gerne darauf zurück.

Grüße,
Harald
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.