Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Jaroslav Sedlák:8.6.2019 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.6.2019 12:32
Avatar
Filip Němeček
Tvůrce
Avatar
Filip Němeček:8.6.2019 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
8.6.2019 13:26
Avatar
plelovsky
Člen
Avatar
plelovsky:10.6.2019 13:59

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

 
Nahoru Odpovědět
10.6.2019 13:59
Avatar
Ondřej Štorc
Tvůrce
Avatar
Ondřej Štorc:10.6.2019 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.6.2019 14:11
Život je příliš krátký na to, abychom bezpečně odebírali USB z počítače..
Avatar
Martin Petrovaj
Tvůrce
Avatar
Odpovídá na Ondřej Štorc
Martin Petrovaj:10.6.2019 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.6.2019 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.