Brno? Vypsali jsme pro vás nové termíny školení Základů programování a OOP v Brně!
Avatar
Jaroslav Sedlák:8. června 12:32

Nevím jak do proměnné kurz ulozit hodnoty z CNB kurzovniho listku, ktery je ve tvaru:

07.06.2019 #109
země|měna|množ­ství|kód|kurz
Austrálie|dolar|1|A­UD|15,853
Brazílie|real|1|BRL|5,8­68
Bulharsko|lev|1|BG­N|13,110

Zkusil jsem: zkoušel sem : (samozrejme StreamReader atd.)

string [] pole = radek.Split('.')

Chci docílit: chci uložit měny dle ČNB kurzovního lístku do dvourozměrného pole abych mohl 1 proměnné deklarovat právě jednu hodnotu kterou získám z .txt souboru.
Například chci získat kurz Australského dolaru, a dále s ním pracovat.

 
Odpovědět 8. června 12:32
Avatar
Filip Němeček
Redaktor
Avatar
Filip Němeček:8. června 13:26

V první řadě bych vyhodil 2D pole, pro tento typ dat se nehodí.

Vytvoř si strukturu, která bude obsahovat třeba kód měny jako String a její aktuální hodnotu jako Decimal.

Potom můžeš stažený text rozdělit po řádcích, dále rozdělit řádek "|" a vytvářet instance tvé struktury.

 
Nahoru Odpovědět  ±0 8. června 13:26
Avatar
plelovsky
Člen
Avatar
plelovsky:10. června 13:59

Dictionary<string, decimal>
https://docs.microsoft.com/…dictionary-2?…

 
Nahoru Odpovědět  +1 10. června 13:59
Avatar
Ondřej Štorc:10. června 14:11

Martin Petrovaj co se ti nelíbí na řešení od Filipa? Co se týče čistoty kódu, tak je rozhodně mnohem lepší než nic neříkající slovník. A snáze uchováš víc informací (měna, země,..) než pomocí slovníku.

Nahoru Odpovědět 10. června 14:11
Život je příliš krátký na to, abychom bezpečně odebírali USB z počítače..
Avatar
Martin Petrovaj
Překladatel
Avatar
Odpovídá na Ondřej Štorc
Martin Petrovaj:10. června 14:48

OP nepísal nič o potrebe uchovávať viac informácií než kód meny a aktuálny kurz.

Vhodne pomenovaným slovníkom (napr. CurrencyToRate, alebo nedajbože MenaNaKurz) dosiahne absolútne to isté ako s nejakým List<Currency>. Slovník mu ale navyše poskytne out of the box kopu hotových metód pre prácu s jednotlivými položkami + indexer.

After all, pri aktuálnych požiadavkách OP (a podľa Filipovho riešenia) by Currency bol len pár dvoch hodnôt - string a decimal. Dictionary<string, decimal> je kolekcia, ktorej položky sú typu KeyValuePair<strin­g, decimal, čo je už podľa samotného názvu presne to isté. Písať na to vlastnú štruktúru je v danej situácii zbytočný overhead a vyhodený čas. Viac kódu bude musieť písať aj neskôr, keď bude chcieť pracovať s Currency v nejakom Liste, kde bude musieť písať svoje anonymné metódy tam, kde by postačili hotové metódy na slovníku.

Navyše z Dictionary<string, decimal>, kde sú ako generické parametre jednoduché predefined typy je hneď jasné na čo slúži (opäť za predpokladu, že je premenná rozumne pomenovaná). Ak by iný programátor než OP uvidel List<Currency>, tak nebude tušiť čo sa pod typom Currency skrýva, bude ho musieť bližšie skúmať a držať v hlave nadbytočnú informáciu.

Ak by potreboval pracovať s viac údajmi z toho feedu, potom by mal struct alebo osobitná classa zmysel. V tejto konkrétnej situácii by som sa ale riadil YAGNI.

A ak ti vadí, že zrozumiteľnosť použitia dictu je daná tým, ako dobre je pomenovaná daná premenná, tak rovnakým problémom môže trpieť aj použitie structu. V takejto triviálnej situácii je jedno, či použiješ jednoduchší hotový typ z .NETu alebo vlastný objekt - ak nevie programátor dobre pomenovať veci, tak ten kód bude neprehľadný v oboch prípadoch. A práve situácia, keď je kľúčom v slovníku string je asi tá najprirodzenejšia, kedy by som slovník použil.

Nahoru Odpovědět 10. června 14:48
if (this.motto == "") { throw new NotImplementedException(); }
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.