AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Zeichenkette Prüfen ob gültige Zahl ohne Umwandeln?
Thema durchsuchen
Ansicht
Themen-Optionen

Zeichenkette Prüfen ob gültige Zahl ohne Umwandeln?

Ein Thema von Kenshin4455 · begonnen am 28. Nov 2007 · letzter Beitrag vom 7. Feb 2011
Antwort Antwort
Seite 3 von 3     123   
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.041 Beiträge
 
Delphi XE2 Professional
 
#21

Re: Zeichenkette Prüfen ob gültige Zahl ohne Umwandeln?

  Alt 30. Nov 2007, 11:41
Na, dann will ich auch noch mal was beisteuern.
Dürfte um ca. 25 % schneller sein als optimale Pascal-Lösungen

Als gültig werden Strings erkannt, die
a) nur Ziffern enthalten, aber mindestens eine Ziffer
b) als erstes Zeichen ein Vorzeichen haben, dem mindestens eine Ziffer folgt

Delphi-Quellcode:
FUNCTION IsSignedInteger(s:string):boolean;
asm
            test eax,eax
            je @Exit // s=NIL
            cmp [eax-4],0 // geändert auf Wunsch des Erstellers
            je @Fail // s hat Länge 0
            mov edx,eax
            mov ax,[edx] // AL=erstes Zeichen, AH=zweites Zeichen
            add edx,2
            cmp al,'-'
            je @HasSign
            cmp al,'+'
            jne @NoSign
@HasSign: add ah,$D0
            sub ah,$0A
            jb @Loop // Nach Sign folgt Ziffer
@Fail: xor eax,eax // Fehler
            jmp @Exit
@NoSign: add al,$D0
            sub al,$0A
            jae @Fail // erstes Zeichen nicht '0'..'9','-','+'
            jmp @Entry
@Loop: mov ax,[edx]
            add edx,2
            add al,$D0
            sub al,$0A
            jae @CheckEnd // nicht '0'..'9'
@Entry: add ah,$D0
            sub ah,$0A
            jb @Loop // ist '0'..'9'
            sub ah,$D0-$0A
            je @True // Ist 0 Byte (Ende vom String)
@CheckEnd: sub al,$D0-$0A
@True: sete al
@Exit:
end;
[edit=MrSpock]3. ASM Befehl auf Wunsch des Erstellers geändert. Mfg, MrSpock[/edit]
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.114 Beiträge
 
Delphi 12 Athens
 
#22

Re: Zeichenkette Prüfen ob gültige Zahl ohne Umwandeln?

  Alt 30. Nov 2007, 19:08
@LoCrux: OK, wenn wirklich nur Zahlen und Buchstaben drin sind, dann sag ich nichts dagegen
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von LoCrux
LoCrux

Registriert seit: 5. Mär 2007
Ort: Gwang-Yang-City
48 Beiträge
 
Delphi 2009 Enterprise
 
#23

Re: Zeichenkette Prüfen ob gültige Zahl ohne Umwandeln?

  Alt 30. Nov 2007, 23:43
@Amateurprofi:

SPEEDFREAK

“C++ is an insult to the human brain.” [Niklaus Wirth]

2B OR NOT 2B (.. THAT IS FF)
  Mit Zitat antworten Zitat
SvenLittkowski

Registriert seit: 18. Dez 2004
98 Beiträge
 
#24

AW: Zeichenkette Prüfen ob gültige Zahl ohne Umwandeln?

  Alt 7. Feb 2011, 05:29
Und wie kann man testen ob ein String eine Zahl darstellt, wenn jene Zahlen auch negativ (mit vorangestelltem Minus) sein können und vom Typ Integer oder Real sein können (also mit Kommastellen, wobei das Komma je nach Land durch ein Komma oder einen Punkt dargestellt sein kann)? Gleichzeitig will ich aber Strings wie die nachfolgenden "Un"-Zahlen ausschließen:
- "12-3"
- "123-"
- "123."
- "1.2.3"
- "1-2-3"
- "-.-"

Bei meinem Problem kann ich mit Schleifen arbeiten. Nur der Algorithmus fällt mir nicht ein.

Geändert von SvenLittkowski ( 7. Feb 2011 um 05:32 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.114 Beiträge
 
Delphi 12 Athens
 
#25

AW: Zeichenkette Prüfen ob gültige Zahl ohne Umwandeln?

  Alt 7. Feb 2011, 09:57
Das Einfachste: Delphi-Referenz durchsuchenVal, Delphi-Referenz durchsuchenTryStrToInt, Delphi-Referenz durchsuchenTryStrToFloat, ...

Delphi-Referenz durchsuchenDecimalSeparator

Ansonsten einfach alles nacheinander prüfen und schauen, ob was Richtiges/Falsches drin vorkommt.
Delphi-Quellcode:
Result := False;
i := 1;
if (i <= Length(S)) and (S[i] in ['+', '-']) then
  Inc(i);
if (i > Length(S)) or not (S[i] in ['0'..'9']) then
  Exit;
while (i <= Length(S)) and (S[i] in ['0'..'9']) do
  Inc(i);
if (i <= Length(S)) and (S[i] = DecimalSeparator) then
begin
  Inc(i);
  if (i > Length(S)) or not (S[i] in ['0'..'9']) then
    Exit;
  while (i <= Length(S)) and (S[i] in ['0'..'9']) do
    Inc(i);
end;
Result := i > Length(S);
Das läßt sich natürlich noch ein bissl hübscher zusammenfassen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 7. Feb 2011 um 10:02 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#26

AW: Zeichenkette Prüfen ob gültige Zahl ohne Umwandeln?

  Alt 7. Feb 2011, 10:02
http://www.delphipraxis.net/158131-t...tige-real.html
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#27

AW: Zeichenkette Prüfen ob gültige Zahl ohne Umwandeln?

  Alt 7. Feb 2011, 10:02
@himitsu & alle anderen:
Das Post von SvenLittkowski wurde von ihm auch in einem eigenen Thread gepostet, der unter dem Namen Test ob gültige REAL zu finden ist

PS: Ach DeddyH ...... :p
Chris
Die Erfahrung ist ein strenger Schulmeister: Sie prüft uns, bevor sie uns lehrt.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:28 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz