Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
cooty125
Založen: 22. 11. 2011 Příspěvky: 40
|
Zaslal: 10. prosinec 2011, 17:45:39 Předmět: Algorytmus kontroly vstupu |
|
|
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 |
|
|
perry
Založen: 28. 07. 2009 Příspěvky: 879
|
Zaslal: 10. prosinec 2011, 19:22:22 Předmět: |
|
|
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 ... to IN / NOT IN se dá testovat přes ASCII kódy
Tou ~ si nejsem jistý 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 |
|
|
Augi
Založen: 28. 07. 2007 Příspěvky: 782 Bydliště: Čerčany
|
Zaslal: 10. prosinec 2011, 19:24:51 Předmět: |
|
|
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 |
|
|
cooty125
Založen: 22. 11. 2011 Příspěvky: 40
|
Zaslal: 10. prosinec 2011, 19:33:33 Předmět: |
|
|
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. _________________ Programátor v C# XNA a 3D Grafik.
http://www.xna.mzf.cz/
http://www.czechcode.hu.cz/ |
|
Návrat nahoru |
|
|
perry
Založen: 28. 07. 2009 Příspěvky: 879
|
Zaslal: 10. prosinec 2011, 19:35:10 Předmět: |
|
|
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 |
|
|
cooty125
Založen: 22. 11. 2011 Příspěvky: 40
|
Zaslal: 10. prosinec 2011, 19:52:47 Předmět: |
|
|
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 _________________ Programátor v C# XNA a 3D Grafik.
http://www.xna.mzf.cz/
http://www.czechcode.hu.cz/ |
|
Návrat nahoru |
|
|
Augi
Založen: 28. 07. 2007 Příspěvky: 782 Bydliště: Čerčany
|
Zaslal: 10. prosinec 2011, 19:56:38 Předmět: |
|
|
Ne, tak to opravdu není 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 |
|
|
perry
Založen: 28. 07. 2009 Příspěvky: 879
|
Zaslal: 10. prosinec 2011, 20:12:35 Předmět: |
|
|
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 To zní logičtěji _________________ Perry.cz |
|
Návrat nahoru |
|
|
|