Dotaz začátečníka   zodpovězená otázka

VB.NET

Dotaz

Visual Basic .NET 2005 Expres

Dobrý den všem,

Rád bych se jako začátečník zeptal na postup, abych při řešení daného problému neudělal chybu hned na začátku a postupoval aspoň trochu jako „neamatér“.

Mám datový textový soubor s následující strukturou:

001 Pepa Novák

002 Praha

003 Leden 2007

004 10000

999

001 Jarda Krátký

002 Liberec

003 Prosinec 2006

999

Vím jaké jsou pod jednotlivými kódy na začátku řádku informace na určitých polích v tomto řádku. Počet řádků u jednotlivých osob je proměnný, ale může jich být hodně (až 200 počet není znám). Každá osoba je ukončena ukončovacím kódem (999). Osob může být cca do 50 (počet není znám). Výsledkem bude, že budu tyto hodnoty mezi sebou různě porovnávat. Například: Pepa Novák nebydlí ve stejném městě jako Jarda Krátký.

Konkrétní dotaz: mám procházet všechny jednotlivé položky u osob, nebo stejné položky u všech osob? Všechny data načítat do samostatných proměnných? Nebo do polí?

Uvítal bych i kousek kódu.

Díky za rady

Roman

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Vážený příteli,

nejprve bych Vás chtěl ubezpečit, že velká část nás návštěvníků na tomto Webu se považuje za více méně začátečníky (proto jsme zde, abychom se od svých zkušenějších kolegů něčemu přiučili), a proto nepovažuji za nejšťastnější Vaši otázku nazvat "Dotaz začátečníka". Doporučoval bych Vám proto přečíst si alespoň základní pravidla a doporučení pro účast v této diskusi (naleznete je v úplně prvním příspěvku diskusních vláken). Neberte to, prosím, jako pokárání, spíše jako radu začátečníka začátečníkovi - správným označením dotazu výrazně zvýšíte šanci, že se dočkáte potřebné odpovědi.

Nyní ale k Vašemu dotazu. Obávám se, že jste jej specifikoval velmi široce. Předně, než můžete jakkoliv manipulovat s jednotlivými daty, musíte je načíst do paměti počítače. A zde záleží na tom, co od aplikace očekáváte.

Pokud chcete provést pouze jedno konkrétní porovnání, stačí projít postupně sekvenčně celý soubor (řádek po řádku), nalézt potřebná data, tato přiřadit do proměnných (v tomto případě by stačily samostatné proměnné), a vyhodnotit.

Pravděpodobnější ovšem je, že budete provádět těch porovnávání a vyhodnocování více, pak by bylo soustavné čtení ze souboru neefektivní, pak musíte nejprve data načíst (a opět, jestli načtete data všechna, nebo jen specifická záleží na tom, co máte v plánu dělat) a pak provádět nad načtenými daty potřebné operace. V tomto případě ja ale jedinou rozumnou cestou (aby se to celé dalo vůbec programově ošetřit) použití polí, resp. v tomto případě, kdy neznáte počet členů bych se zaměřil asi spíše na kolekce.

Jak na to konkrétně - doporučuji pročíst seriál článků "VB Net od začátku", který naleznete na tomto webu ( http://www.vbnet.cz/kategorie--12.aspx ) - vše se tam už probíralo, jak práce s poli a kolekcemi, tak načtení textového souboru, případně práce se strukturami (speciální kontejner na data, který by se ve Vašem případě možná také hodil).

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Dobrý den,

děkuji za odpověď. Ale musím na Vaši odpověď zareagovat.

V prví řadě chci říci že tento web je pěkný a naučný. Určitě mnoha lidem pomohl a pomáhá. Autoři si určitě zaslouží pochvalu.

Na druhou stranu napíši svůj názor, který prosím berte jako návrh do další práce autorům webu (snad si to tady přečtou) a ne jako kritiku.

Tento web je určený „i“ pro začátečníky. Je zde sekce pro začátečníky. V těchto článcích jsou popisovány úplné začátky (proměnné a datové typy, podmínky, cykly, pole …). Proto ho navštěvuji. Ale takových webů je více. Takové články pro začátečníky jsou tam také. A proč tedy chodit právě na tento web? Autoři webu ale chtějí aby sem lidé chodili. Vždyť bez těch lidí „i“ začátečníků by to nemělo smysl dělat.

Vaší odpovědi k mému problému rozumím. Načíst data, založit proměnné, pole, nebo kolekce a dále s nimi pracovat. Ale rozumět tomu teoreticky a něco takového naprogramovat. To jsou „nebe a dudy“. A tady si myslím, že je ten problém. To co je popisováno v článcích pro začátečníky je taky popisováno na ostatních webech. A my „začátečníci“ si na všech těchto webech přečteme, že jsou datové typy, a jaké jsou, že jsou podmínky, jaké jsou cykly…. Ale toto je opravdu všude. Na druhou stranu věřím, že není možné každému napsat kód, o který si tady napíše.

Velice se mě líbil článek v sekci sítě – Kreslící tabule. Na určitém „programu“ se používají teoretické informace. A výsledkem je plně funkční program. Toto by možná měla být cesta dalšího vývoje článků. Návštěvníci například zvolí jeden z deseti témat (jednoduchých programů), které potom budou rozebrány v článku. Tím by mělo být vneseno do suchých teoretických informací i trochu zamyšlení nad celou problematikou programování.

Vám děkuji za velice rychlou odpověď. Teď mi to připadá, že jste mi s dobrou vůlí chtěl pomoci a já Vám za to začínám kázat. Ne určitě ne. Děkuji za odpověď.

Přál bych si, aby návštěvníci tohoto webu mohli říkat, že tyto stránky jim v začátcích pomohly nejvíce….

Roman

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Já Vás opět zdravím a chtěl bych pouze doplnit. Ve většině Vašich vyjádření přece nejsme v rozporu. Taky jsem začátečník, a než jsem začal tento Web navštěvovat, měl jsem o mnoha věcech velice zkreslené a v mnohém i chybné představy. A myslím si, že (z velké části díky tomuto Webu) dnes již pomalu začínám chápat některé souvislosti a principy, i když, na druhou stranu, čím více toho poznávám, tím větší pole nepoznaného se přede mnou rozprostírá.

Jediné, s čím s Vámi nemohu souhlasit, je, že články pro začátečníky na těchto stránkách jsou pouhopouhá teorie, jeké je všude plno. Pokud si pozorně přečtete celý seriál, uvědomíte si, že právě vazba na konkrétní použití je to, co díla pánů Hercega a Jechy povyšuje nad ostatní články jinde na webu (samozřejmě šíře a složitost jednotlivých ukázkových příkladů musí být úměrná množství již probrané látky). Váš námět na účelově zaměřené seriály je jistě podnětný a také bych něco takového přivítal, ovšem je zapotřebí si uvědomit, že toto jde realizovat až ve fázi "mírně pokročilých" programátorů, (a Váš Kreslící tabule je toho přesným důkazem).

A k mému minulému příspěvku - omlouvám se Vám, ale pro Váš dotaz skutečně z velké části naleznete možné postupy řešení (na praktických příkladech) ve zmiňovaném seriálu, je pouze zapotřebí umět jednotlivé poznatky správně analyzovat a aplikovat na Váš příklad. A pokud Vám nebude něco konkrétního dostatečně jasné, nebude problémem položit konkrétní dotaz - i to je pro programovábní velice důležité, vědět, na co se chci vlastně zeptat. Pokud se do diskuse obrátíte s konkrétním problémem, co Vám nejde či nefunguje (nevíte, jak ten svůj soubor přečíst, jak vyhodnotit obsah jednotlivých řádků, jak to celé uložit pro další práci, jak najít potřebné záznamy, atd...), pak určitě naleznete na této diskusi pomoc.

A ještě jedna rada. Nehledejte na internetu přesné řešení svého konkrétního jednoho problému. Jednak ho naleznete s velice malou pravděpodobností a navíc, pokud Vám to řešení i někdo napíše, pak, pokud to s programováním do budoucna myslíte vážně, Vám to sice momentálně pomůže, ale do budoucna Vám to nic moc nedá. Pokud ale hledáte řešení podobných či souvisejících problémů, pak dříve či později pochopíte i podstatu jejich řešení a budete do budoucna schopen sám řešit i mnohem složitější úlohy - budete vědět, jak na to.

Ale abychom také neteoretizovali, pokud chcete, napiště trošičku konkrétněji, s čím byste potřeboval pomoci, a pokud budu vědět, pomohu.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Jenom abyste neřekl, že bych snad nechtěl pomoci, posílám pro zamyšlení jeden z možných kódů, kterým se Váš problém dá řešit (ještě jednou ale předesílám, že se jedná o jedno z mnoha řešení, a jestli je optimální, to závisí na tom, CO a JAK máte na mysli s daty dále provádět:

Private lidi As New Dictionary(Of String, Dictionary(Of String, String))


    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Dim jedenRadek As String
        Dim jmeno As String = ""

        'otevřít soubor pro čtení
        Dim soubor As New IO.StreamReader("d:\test.txt", System.Text.Encoding.Default)

        jedenRadek = soubor.ReadLine

        Do While Not jedenRadek Is Nothing
            If jedenRadek.Substring(0, 3) = "001" Then
                jmeno = jedenRadek.Substring(4)
                lidi(jmeno) = New Dictionary(Of String, String)
            ElseIf jedenRadek.Substring(0, 3) = "999" Then
            Else
                lidi(jmeno).Add(jedenRadek.Substring(0, 3), jedenRadek.Substring(4))
            End If
            jedenRadek = soubor.ReadLine
        Loop
        'zavřít soubor
        soubor.Close()


        ' výpis (všech) hodnot pro všechny lidi v souboru
        For Each clovek As KeyValuePair(Of String, Dictionary(Of String, String)) In lidi

            For Each hodnota As KeyValuePair(Of String, String) In clovek.Value
                MsgBox(clovek.Key & ":" & hodnota.Key & " - " & hodnota.Value)

            Next
        Next


        'Nalezení konkrétní hodnoty pro konkrétního člověka
        Dim name As String = "Pepa Novák"
        Dim key As String = "003"

        Try
            MsgBox("Hodnota pro jméno " & name & " a klíč " & key & " je rovna: " & lidi(name)(key))
        Catch
            MsgBox("Hodnota pro jméno " & name & " a klíč " & key & " neexistuje! ")
        End Try


    End Sub

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Dobrý den ještě jednou,

díky za Váš názor, určitě je v něm kus moudra. Ještě bych si tedy dovolil několik slov.

Ty příklady s nějakým zaměřením nemusí, podle mého názoru, být pro pokročilejší. Mohou být i na velice jednoduché věci, ale tím, že vidím i ty „věci okolo“, by mě asi posouvalo rychleji dopředu než jen útržky kódu. Já ale také myslel na celkové myšlení a způsoby programování.

Zkusím příklad: dostanu za úkol spočítat 1256*1789. A jak to udělat. Dát to pod sebe a nějak počítat. Nebo spočítat na kalkulačce. A o tom to je.

Zamyslet se nad konkrétním úkolem a zvolit ten nejlepší způsob. A to určitě na kousku kódu nelze.

A právě proto, že ten konkrétní příklad pomůže právě jen jednomu, ti ostatní se budou muset zamyslet nad úpravou a tím to „dostal pod kůži“.

Ještě chci poděkovat za ten kód. Určitě si ho vyzkouším a do upravím. A tím dokážu, že nejsem daleko od pravdy.:-)

Díky Roman

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Zdravím, to, co navrhujete s těmi praktičtějšími příklady v článcích, je pravda. S výukou programování mám poměrně velkou praxi a vím, že začátečníky je potřeba hned ze začátku zaujmout a ohromit jednoduše napsanými programy, které "něco dělají". Věřte mi, že nejtěžší na napsání článku je právě vymyslet příklad. Ale přeci jen myslím, že se snažím ukazovat (hlavně v seriálu pro začátečníky) i příklady praktické - jen tak namátkou - program pro evidenci výdajů a příjmů, vykreslování grafů atd., to vše najdete v seriálu pro začátečníky.

Programování je poměrně složitá činnost, u které je třeba přemýšlet a trénovat mozek. Proto ani v diskusích většinou nenapíšu přímo program, který někdo požaduje, ale jen odkážu na zdroje, kde najít příslušnou odpověď.

Přemýšlel jsem o tom, že bych udělal několikadílný seriál, kde by se postupně vyvíjel komplexnější program, ale zatím na to nemám čas. Ale děkuji za podněty.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Díky za reakci,

Váš web je opravdu pěkný. Pro výběr tématu bych doporučoval hlasování návštěvníků, kteří by určitě rádi dali i podměty na programy, které by jste protřídili.

A ještě o tom přemýšlení. Ano programování je hodně o té analýze, a vymyšlení celkové koncepce. A to by bylo dobré rozebrat na úvod vybraného „programu“ z hlasování. Myslím že většina lidí právě v tomto momentu udělá zásadní chybu, která je v některých případech „osudová“. Proto bych uvítal i jen teoretický rozbor „programů“, které by skončily v hlasování na ostatních místech.

A s tím časem. To je asi opravdu ten největší nepřítel….

Roman

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback