.[ ČeskéHry.cz ].
Algorytmus kontroly vstupu

 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> .NET
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
cooty125



Založen: 22. 11. 2011
Příspěvky: 40

PříspěvekZaslal: 10. prosinec 2011, 17:45:39    Předmět: Algorytmus kontroly vstupu Odpovědět s citátem

Dobrý den,

vytvořil jsem si tento algorytmus, který vrací hodnotu true/false podle toho, zda je vstup číslo nebo desetinné číslo, nebo string či nesmyslná hodnota.
A můj dotaz spočívá v tom, zda se dá tento kód zkrátit, nebo zjednodušit.

kód:

public bool ZkontrolujVstup(string vstup)
{
            if (vstup.Length > 0)
            {
                float parsed;
                int converted;
                float.TryParse(vstup, out parsed);

                try
                {
                    converted = Convert.ToInt32(float.Parse(vstup));
                    return true;
                }
                catch
                { return false; }
            }
            return false;
}

_________________
Programátor v C# XNA a 3D Grafik.
http://www.xna.mzf.cz/
http://www.czechcode.hu.cz/
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail Zobrazit autorovi WWW stránky MSN Messenger
perry



Založen: 28. 07. 2009
Příspěvky: 879

PříspěvekZaslal: 10. prosinec 2011, 19:22:22    Předmět: Odpovědět s citátem

Asi bych prošel ten string znak po znaku a měl 4 flagy...

kód:
bool flagInt = false;
bool flagFloat = false;
bool flagString = false;

for (int i = 1; i < vstup.Length; i++)
{
   char znak = vstup[i];
   if (znak NOT IN <0 ..9 - . e>) { flagString = true; flagInt = false; flagFloat = false; break }
   if (znak IN <0 .. 9>) { flagInt ~= true; flagFloat = true; }
   if (znak == '.') { flagInt = false; }
atd

}


Není to celý, je to jen myšlenka Smile ... to IN / NOT IN se dá testovat přes ASCII kódy
Tou ~ si nejsem jistý Smile Ale prostě aby jakmile tam jednou vleze false, tak už tam nikdy nebylo true

No a nebo použít regulární výraz by mohlo být taky rychlejší...
_________________
Perry.cz
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Augi



Založen: 28. 07. 2007
Příspěvky: 781
Bydliště: Čerčany

PříspěvekZaslal: 10. prosinec 2011, 19:24:51    Předmět: Odpovědět s citátem

Základem je používat výjimky jen ve výjmečných případech, protože jejich vyvolávání je hodně náročné.

Nemám žádný kontext, takže nevím, k čemu chceš ten kus kódu přesně používat. Ale ten try-catch hodně smrdí, toho bych se určitě zbavil.
kód:
float f;
int i;
return int.TryParse(vstup, out i) || float.TryParse(vstup, out f);
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
cooty125



Založen: 22. 11. 2011
Příspěvky: 40

PříspěvekZaslal: 10. prosinec 2011, 19:33:33    Předmět: Odpovědět s citátem

Augi napsal:
Základem je používat výjimky jen ve výjmečných případech, protože jejich vyvolávání je hodně náročné.

Nemám žádný kontext, takže nevím, k čemu chceš ten kus kódu přesně používat. Ale ten try-catch hodně smrdí, toho bych se určitě zbavil.
kód:
float f;
int i;
return int.TryParse(vstup, out i) || float.TryParse(vstup, out f);


Právě proto jsem chtěl teto úsek předělat. Děkuji, tato možnost mne vůbec nenapadla. Kód funguje bez problému. Wink
_________________
Programátor v C# XNA a 3D Grafik.
http://www.xna.mzf.cz/
http://www.czechcode.hu.cz/
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail Zobrazit autorovi WWW stránky MSN Messenger
perry



Založen: 28. 07. 2009
Příspěvky: 879

PříspěvekZaslal: 10. prosinec 2011, 19:35:10    Předmět: Odpovědět s citátem

Nejsem si jistý, ale to TryParse možná interně vyvolává výjimku taky.. zavolá klasické parse, odchytí si výjimku a podle toho vrací true / false
_________________
Perry.cz
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
cooty125



Založen: 22. 11. 2011
Příspěvky: 40

PříspěvekZaslal: 10. prosinec 2011, 19:52:47    Předmět: Odpovědět s citátem

perry napsal:
Nejsem si jistý, ale to TryParse možná interně vyvolává výjimku taky.. zavolá klasické parse, odchytí si výjimku a podle toho vrací true / false


Ano, také jsem to teď zjistil. Děkuji za reakci Wink
_________________
Programátor v C# XNA a 3D Grafik.
http://www.xna.mzf.cz/
http://www.czechcode.hu.cz/
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail Zobrazit autorovi WWW stránky MSN Messenger
Augi



Založen: 28. 07. 2007
Příspěvky: 781
Bydliště: Čerčany

PříspěvekZaslal: 10. prosinec 2011, 19:56:38    Předmět: Odpovědět s citátem

Ne, tak to opravdu není Wink Když už byste chtěli takové přirovnání, tak by to bylo naopak - Parse použije TryParse a pokud vrátí false, tak vyvolá výjimku.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
perry



Založen: 28. 07. 2009
Příspěvky: 879

PříspěvekZaslal: 10. prosinec 2011, 20:12:35    Předmět: Odpovědět s citátem

citace:
Ne, tak to opravdu není Wink Když už byste chtěli takové přirovnání, tak by to bylo naopak - Parse použije TryParse a pokud vrátí false, tak vyvolá výjimku.


Jo.. no to mi nenapadlo, že by to mohlo být taky takhle Very Happy To zní logičtěji
_________________
Perry.cz
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> .NET Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna