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

edit eingabe begrenzen

 

denny
Supporter

Supporter



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

@ Jan
Mit SSCANF ist schwierig eine Eingabe auf Richtigkeit zu überprüfen.
z.B str='10g30' dein Algo würde das akzeptieren Number=1 sein, während man eigentlich 1030 eingeben wollte.

@ tuelee

so:
Code:

ist_zahl = regexp(wert ,'^[1-9][0-9]*$')
 
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: 04.10.2010, 15:52     Titel:
  Antworten mit Zitat      
Hallo Denny!

Zitat:
Mit SSCANF ist schwierig eine Eingabe auf Richtigkeit zu überprüfen.
z.B str='10g30' dein Algo würde das akzeptieren Number=1 sein, während man eigentlich 1030 eingeben wollte.

Das stimmt natürlich. (Number=10 meintest Du wohl)
Deshalb mache ich auch das Update des Edit-Fensters. Der Check der Variablen wird als Callback des Edit-UICONTROLs ausgeführt. Bei der Einabe "10g30" wird also automatisch eine "10" daraus gemacht. Das könnte/sollte/müsste dem Nutzer eigentlich auffallen.

Es wäre auch möglich den 4. Output "NextIndex" von SSCANF zu benutzen, um zu prüfen, ob bis zum Ende des Strings gelesen wurde - dann kann STRTRIM helfen unnötige Leerzeichen am Ende einfach zu ignorieren.
Der Vorteil von SSCANF ist, dass der Test numerisch stattfinden kann, womit die meisten Matlab-Nutzer besser zurecht kommen dürften, als mit den Regular Expressions. Für sichere Web-Interfaces sind die Regular Expressions aber oft besser.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 04.10.2010, 16:26     Titel:
  Antworten mit Zitat      
Jan S hat Folgendes geschrieben:
Hallo Denny!

Das stimmt natürlich. (Number=10 meintest Du wohl)
Deshalb mache ich auch das Update des Edit-Fensters. Der Check der Variablen wird als Callback des Edit-UICONTROLs ausgeführt. Bei der Einabe "10g30" wird also automatisch eine "10" daraus gemacht. Das könnte/sollte/müsste dem Nutzer eigentlich auffallen.


Ja Number =10 war gemeint. Auffallen? Na ja, man sollte doch immer von dummen Benutzer ausgehen, also dann wohl nicht. Very Happy
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: 07.10.2010, 00:50     Titel:
  Antworten mit Zitat      
Hallo Denny,

ja, ich gebe es zu. Ich lasse das UICONTROL nochmal kurz aufblinken (siehe UIFLASH in der FEX).
Ich brauche das z.B. in einer GUI, in der die Körpergröße in Zentimetern angegeben werden muss. Falls zahlen unter 3 eingegeben werden, oder etwas wie "180 cm", "1m80" etc, hilft der Test mit SSCANF und dem Aufblinken in meinem Fall.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
tuelee
Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 13.10.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.11.2010, 15:22     Titel:
  Antworten mit Zitat      
denny hat Folgendes geschrieben:
Ach so, dann so
Code:

ist_zahl = regexp(wert,'^[1-9][0-9]*(\.(\d)*)?([eE]([+-])?(\d)*)?$|^(0)?\.(\d)+([eE]([+-])?(\d)*)?$')
 


hallo denny,

ich bin am verzweifeln. nach mehreren versuchen gebe ich jetzt doch auf. ich versuche nun auch 2*10^2 zahlen darstellen zu lassen, aber beim bessten willen verstehe ich die syntaxfolge für regexp nicht. könntest du mir deine syntaxfolge erklären. danke.
Private Nachricht senden Benutzer-Profile anzeigen
 
Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 17.11.2010, 02:09     Titel:
  Antworten mit Zitat      
Hallo Danny,

...und vielleicht hättest du ja auch einen Link wo die Expressions verständlich erklärt werden. Mit meinen regexpi-Basiswissen kann ich z.B. die Zeile aus dem vorherigen Post irgendwie nicht nachvollziehen, würde es aber gerne Smile.

Danke schön!

MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 17.11.2010, 15:30     Titel:
  Antworten mit Zitat      
Hallo ihr beiden,

In Matlab sind Reguläre Ausrücke noch nicht so mächtig, und deswegen sind nicht alle Konstrukte möglich. Also musst ihr Matlab-Doku stets mit Quellen abgleichen

Gute Quelle um zu lernen wäre z.B: http://www.regenechsen.de/phpwcms/index.php?regex

meine Ausdrücke teste ich hier:
http://gskinner.com/RegExr

@tuelee
ich möchte ungerne jetzt einzelne Operatoren erklären, schaut einfach hier:
http://www.regenechsen.de/phpwcms/index.php?regex_dt_elemente

Dieser Ausdruck besteht aus zwei Teilen: getrennt durch |

^[1-9][0-9]*(\.(\d)*)?([eE]([+-])?(\d)*)?$ --- für Zahlen von 1 bis N

^ --- Vergleich am Anfang des Strings
[1-9] --- Zahl beginnt mit Ziffern zw 1 und 9
[0-9]* --- kann aus weiteren Ziffern bestehen
(\.(\d)*)? --- Wenn es eine Fliesskommazahl, dann folgt es von einem Punkt und weiteren Ziffern
([eE]([+-])?(\d)*)? --- Exponent bestehend aus Buchstabe E, Zeichen + oder - und Ziffern (E+3)
$ --- Vergleich am Ende des Strings

^und$ zwingen REGEXP nur ab Anfang und/oder ab Ende zu vergleichen



^(0)?\.(\d)+([eE]([+-])?(\d)*)?$ -- für Zaheln zw. 0 und 1
Schritte Identisch wie Oben:

Im Prinzip musste man das nicht aufteilen und so in einem Schwung schreiben:

Code:

ist_zahl = regexp(wert,'^[0-9]*(\.(\d)+)?([eE]([+-])?(\d)+)?$')
 


2*10^2 wurde folgender Ausdruck passen ^[0-9]\*10\^[0-9]$

zusammen konnte man das so lösen:
Code:

ist_zahl = regexp(wert,'^[0-9]*(\.(\d)+)?([eE]([+-])?(\d)+)?$|^[0-9]\*10\^[0-9]$')
 


Zuletzt bearbeitet von denny am 17.12.2010, 10:26, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 17.11.2010, 15:57     Titel:
  Antworten mit Zitat      
Hallo danny,

vielen Dank, ich werd es mal durcharbeiten Smile

MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen
 
tuelee
Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 13.10.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.11.2010, 11:53     Titel:
  Antworten mit Zitat      
hallo denny,

ebenfalls vielen dank für deine antwort.

gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
stivi888

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.12.2012, 11:28     Titel: Ganze Zahl 1-12
  Antworten mit Zitat      
Ich bin gerade viel zu doof und probier schon die ganze Zeit rum aber es klappt nicht.

Wie kann ich denn die Zahlen als Eingabe in ein Edit Textfeld auf Ganze Zahlen zwischen 1-12 begrenzen???

Ich bin Matlab Anfänger, sorry für die dumme Frage aber ich komm einfach nicht weiter.

Vielen Dank schon mal
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 19.12.2012, 14:12     Titel:
  Antworten mit Zitat      
Hallo

so:

Code:

ist_zahl = regexp(wert,'^(1[0-2]?|[2-9])')
 
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: 19.12.2012, 17:32     Titel: Re: Ganze Zahl 1-12
  Antworten mit Zitat      
Hallo stivi888,

Oder so:
Code:
Str = get(EditH, 'String');
Num = sscanf(Str, '%g');
Num = min(12, max(round(Num), 1));
set(EditH, 'String', sprintf('%d', Num));

Und dies gehört in den Callback des Edit-Feldes.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite Zurück  1, 2

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.