Pouze tento týden sleva až 80 % na e-learning týkající se C# .NET. Zároveň využij akci až 30 % zdarma při nákupu e-learningu - 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í.
discount 30 + hiring

Diskuze: Corona program ciselny udaj nakazenych

Aktivity
Avatar
Sperhak
Člen
Avatar
Sperhak:21.3.2020 12:13

Ahojte som nový čo sa týka programovania. Sám program napísať neviem,ale darí sa mi pozliepať funkčné kúsky z rôznych návodov a upraviť si to podla seba.To čo chcem teraz je však nad moje sily a bol by som rád ak by ste pomohli. Chcem si spraviť program ktorý by čítal z tejto stránky počet nakazených pre slovensko a to číslo by bolo umiestnené najlepšie na paneli úloh.
Ale viem že to treba riešiť postupne a zatiaľ sa snažím to číslo vypísať iba do konzoli no nedarí sa mi.

Zkusil jsem: Otvorím si tú stránku v opere a v nástroji pre vývojárov nájdem tento kód
<tr style="">
<td style="font-weight: bold; font-size:15px; text-align:left;">Slo­vakia</td>
<td style="font-weight: bold; text-align:right">137</td>
<td style="font-weight: bold; text-align:right;"></td>
<td style="font-weight: bold; text-align:right;"> </td>

<td style="font-weight: bold; text-align:right;"></td>
<td style="font-weight: bold; text-align:right">7</td>

<td style="text-align:right;font-weight:bold;">130</td>
<td style="font-weight: bold; text-align:right">2</td>
<td style="font-weight: bold; text-align:right">25</td>
</tr>
a to číslo 137 ak sa nemýlim je tam napísané pevne nieje to premenná tak ako si to tá stránka aktualizuje? A ako by som to vedel dostať v mojom programe do premennej s ktorou by som už vedel pracovať. Dakujem za rady.Možno taký program ocenia viacerý tak ak sa podarí zverejním ho.

Chci docílit: Môže to b yť aj v inom jazyku ale najviac sa asi vyznám v C#

 
Odpovědět
21.3.2020 12:13
Avatar
Sperhak
Člen
Avatar
Sperhak:21.3.2020 12:14

Samozrejme stánku som zabudol pridať https://www.worldometers.info/coronavirus/?…

 
Nahoru Odpovědět
21.3.2020 12:14
Avatar
Sperhak
Člen
Avatar
Sperhak:21.3.2020 15:39

Tak skúsil som toto do konzoli mi to vypíše niečo z tej stránky ale ten retazec co najdem cez operu mi do konzoli nevypise
using System;
using System.Net.Http;
using System.Threadin­g.Tasks;

namespace DownloadPageH­ttpClient
{
class Program
{
static async Task Main(string[] args)
{
using var client = new HttpClient();
client.DefaultRe­questHeaders.Ad­d("User-Agent", "C# console program");

var content = await client.GetStrin­gAsync("https://w­ww.worldometer­s.info/corona­virus/?fbclid=­IwAR2hjFNZpDQ­5GqxLBv6z5HQXop­hgSMGvj4VnYZsmUd­vZ7mGSxWwMe46ca­JY#countries");

Console.Write­Line(content);
}
}
}

 
Nahoru Odpovědět
21.3.2020 15:39
Avatar
Sperhak
Člen
Avatar
Odpovídá na Sperhak
Sperhak:22.3.2020 8:59

Nikto nič?

 
Nahoru Odpovědět
22.3.2020 8:59
Avatar
Jaroslav Smrž
Tvůrce
Avatar
Odpovídá na Sperhak
Jaroslav Smrž:22.3.2020 10:07

K načítání dat z jiné stránky potřebuješ API. K tomu se dají použít XML feedy.

Nahoru Odpovědět
22.3.2020 10:07
/* Life runs on code */
Avatar
Sperhak
Člen
Avatar
Sperhak:22.3.2020 13:22

Tak som znovu pokročil toto je začiatok toho čo sa mi vypíše do konyoli

<tr style="">
                               <td style="font-weight: bold; font-size:15px; text-align:left;">Barbados</td>
                               <td style="font-weight: bold; text-align:right">14</td>
                                                               <td style="font-weight: bold; text-align:right;background-color:#FFEEAA;">+8</td>
                               <td style="font-weight: bold; text-align:right;">                                </td>

                                                               <td style="font-weight: bold; text-align:right;"></td>
                               <td style="font-weight: bold; text-align:right"></td>

                                                                                               <td style="text-align:right;font-weight:bold;">14</td>
                               <td style="font-weight: bold; text-align:right"></td>
                               <td style="font-weight: bold; text-align:right">49</td>
                           </tr>

Vidiet tam Barbados a počet nakazených a pokračuje to tak až na koniec tej tabulky ktorá je na webovej stránke.Otázka je že prečo mi tú tabulku nenačíta odzačiatku?

 
Nahoru Odpovědět
22.3.2020 13:22
Avatar
Sperhak
Člen
Avatar
Sperhak:22.3.2020 13:23

ale až niekde od stredu začínajúc barbadosom.

 
Nahoru Odpovědět
22.3.2020 13:23
Avatar
Jaroslav Smrž
Tvůrce
Avatar
Odpovídá na Sperhak
Jaroslav Smrž:22.3.2020 16:53

Asi takhle, to, co sem dáváš nemá žádný smysl. To je pouze HTML. Z HTML nikdy žádná dynamická data nedostaneš. Potřebuješ serverový programovací jazyk, třeba PHP nebo C#, který bude komunikovat s databází a z ní vypisovat data do HTML šablony. Pak další část (API) bude v nějakém intervalu získávat data ze zdrojového serveru, případně souboru a ukládat je do tvé databáze. Jde to i napřímo, ale riskuješ, že nebudou data dostupná ani u tebe, když vypadne server zdroje. Podle mně sis ukousl příliš velké sousto. Tohle jsou už pokročilejší techniky a začátečník je nemůže nikdy zvládnout.

Nahoru Odpovědět
22.3.2020 16:53
/* Life runs on code */
Avatar
Sperhak
Člen
Avatar
Odpovídá na Jaroslav Smrž
Sperhak:22.3.2020 18:43

Ahoj vďaka za odpoveď. Ja si tiež myslím že je to veľké sústo.Ale k veci myslím že tá stránka https://www.worldometers.info/coronavirus/ si tie dáta berie z nejakej databázy lenže do tej ja prístup nemám. Proste som chcel napísať program čo by prečítal dáta z tej stránky, ked to dokáže prehliadač mal by to aj nejaký jednoduchý program, nejak (to by nemal byť taký problém) by som v tých dátach našiel tie dva údaje čo potrebujem a potom by som s tým už asi vedel pracovať.A áno ako píšeš plánoval som, že tie dáta by sa z tej stránky načítavali v nejakom intervale.To že vypadne server by mi nevadilo nepotrebujem neaktuálne dáta a keď nepôjde tá stránka tak by som zastaralý údaj nepotreboval.

 
Nahoru Odpovědět
22.3.2020 18:43
Avatar
Bugmaster
Člen
Avatar
Odpovídá na Sperhak
Bugmaster:22.3.2020 18:49

Tomuhle se říká data scraping.

V tech několika případech, kdy jsou tohle řešil se mi osvědčil HtmlAgilityPack. Ten stránku stáhne, zparsuje jí do jekéhosi dokumentu, který obsahuje strom stránky. Nad tímhle dokumentem je následně možno vykonávat XPath dotazy, kterýma si vytáhneš, co potřebuješ.

Schválně jsem si to napsal. Zdroják je tady.

Spustíš to nějak takhle:

var s = new Scraper();
var dataZemi = s.Scrapovat();
Console.WriteLine(CountryData.FormatString, "Zeme", "Total", "Deaths", "Rate [%]");
dataZemi.ForEach(Console.WriteLine);

Vystup pak vypada viz priloha.

Editováno 22.3.2020 18:50
 
Nahoru Odpovědět
22.3.2020 18:49
Avatar
Jan Kerhart
Člen
Avatar
Odpovídá na Sperhak
Jan Kerhart:23.3.2020 3:39

Ahoj,
jak již zde bylo řečeno, tento působ není úplně ideální. Jsi takto závislý na "vizuální podobě" stránky, která se může často měnit a to může způsobovat chyby. Mnohem lepší řešení je použití nějakého tzv. API, které ti data vrátí v předem známém a neměnném formátu, který je dobře strojově čitelný, typicky to bývá json nebo xlm. Ale pokud taková možnost není, tak je samozřejmě možné i stáhnout a naparsovat kód té stránky.

Nejjednodušší způsob, jak to udělat je za pomocí HtmlAgilityPack, ale jsou i jiné způsoby. Jak tedy na to:
Nejprve je nutné vložit do projektu balíček HtmlAgilityPack: V okně Solution Explorer (vpravo ve Visual Studiu) klikni pravým na tvůj projekt a vyber "Manage NuGet Packages...". Následně vlevo nahoře vyber "Browse" a do vyhledávacího políčka napiš "HtmlAgilityPack" a potvrď. Měl by se zobrazit seznam, kde jako první bude HtmlAgilityPack. Ten vyber a vpravo klikni na "Install", následně "OK" a vrať se k tvému kódu.

Zde je metoda pro získání počtu nakažených:

public static int getByCountry(string country)
{
    HtmlWeb htmlWeb = new HtmlWeb();
    HtmlDocument document = htmlWeb.Load("https://www.worldometers.info/coronavirus/");
    HtmlNodeCollection rows = document.DocumentNode.SelectNodes("//*[@id=\"main_table_countries_today\"]/tbody[1]/tr");

    foreach (HtmlNode row in rows)
    {
        HtmlNodeCollection columns = row.SelectNodes("td");
        if (columns[0].InnerText == country)
        {
            return int.Parse(Regex.Replace(columns[1].InnerText, "[^.0-9]", ""));
        }
    }

    throw new Exception("Stát nenalezen!");
}

A použití je již triviální, radši ale uvedu:

Console.WriteLine(getByCountry("Slovakia"));

Pokud již znáš a využíváš OOP, tak si metodu uprav a vlož do nějaké třídy.

Kdyby jsi měl jakýkoliv problém, neváhej napsat :)

 
Nahoru Odpovědět
23.3.2020 3:39
Avatar
Sperhak
Člen
Avatar
Odpovídá na Bugmaster
Sperhak:23.3.2020 10:03

Ahojte ďakujem obom za pomoc určite to dalo dosť práce,no bohužiaľ ani jeden kód mi nefunguje.
Bugmaster tvoj kód vyzerá skvelo sú tam aj veci ktoré nepotrebujem no to by mi nevadilo jednoducho ich odignorujem :D Ten výpis čo si poslal vyzerá úžasne. Avšak keď chcem spustiť tvoj kód vypíše mi chybu CS5001 a vôbec sa nechce skompilovať. Snažil som sa tam pridávať tento riadok static void Main(string[] args) lebo tak som to pochopil že tam chýba ten. No po hodine googlenia a snaženia som to vzdal.

Jan Kerhart Tvoj kód vyzerá o dosť jednoduchšie a vďaka za návod ako nainštalovať ten NuGet, ja som tam vždy písal Install-Package HtmlAgilityPack -Version 1.11.23 ,no ten tvoj spôsob je rýchlejší. No bohužiaľ ani tvoj kód mi nefunguje. Mal som chybu, bolo podčiarknuté slovko Regex a ponúklo mi to opravu že mám pridať using System.Text.Re­gularExpressi­ons;
tak som to spravil. Ten riadok aby mi vypísalo do konzoly ten text Console.Write­Line(getByCou­ntry("Slovaki­a"));
som skúšal pridať do hocijakej časti programu no vždy neúspešne. Program prebehol bez chyby no v konzole sa nič nevypísalo.

 
Nahoru Odpovědět
23.3.2020 10:03
Avatar
Bugmaster
Člen
Avatar
Odpovídá na Sperhak
Bugmaster:23.3.2020 10:22

Oh ano, funkci Main() urcite potrebujes. To mě nějak nenapadlo zminit :)

Tady si muzes ten muj repozitar stahnout. Psal jsem to ve Visual Studiu 2019. Melo by to tam jit normalne otevrit a spustit.

Mozna radsi jeste pridej jako posledni radek ve funkci Main() tohle:

Console.ReadKey();

Jinak se totiz muze stat, ze se konzole otevre a po ukonceni hned zase zavre.

 
Nahoru Odpovědět
23.3.2020 10:22
Avatar
Sperhak
Člen
Avatar
Odpovídá na Bugmaster
Sperhak:23.3.2020 11:53

Vďaka toto už funguje.Idem sa s tým hrať a upraviť si to podla seba.

 
Nahoru Odpovědět
23.3.2020 11:53
Avatar
Sperhak
Člen
Avatar
Sperhak:23.3.2020 13:46

Ahoj tak znova píšem, pri tom ako som si prispôsoboval program od Bugmastera som si všimol kde som robil chybu v programe od Jan Kerhart a funguje mi už aj ten. Dalej budem používať už len jeho kód ,lebo je jednoduchší a hneď vypíše len to číslo čo potrebujem. Ale vďaka aj tebe Bugmaster veľa som sa naučil.

 
Nahoru Odpovědět
23.3.2020 13:46
Avatar
Sperhak
Člen
Avatar
Sperhak:24.3.2020 9:29

Tak mám asi triviálnu otázku ale predsa. Mám v program.cs premennú nakazeny() a chcel by som ju použit vForm1.cs no nedarí sa mi prísť na to ako. Premenné z Form1.cs viem používať v Program.cs ale žiadnu premennú z Program.cs neviem použiť v Form.cs Dúfam že ste to pochopili. Dakujem vopred za rady.

 
Nahoru Odpovědět
24.3.2020 9:29
Avatar
Odpovídá na Sperhak
Michal Štěpánek:24.3.2020 11:25

Co znamená

Mám v program.cs premennú nakazeny()

Jakého typu má být ta proměnná? A pokud tam máš ta závorky, tak to není proměnná, ale nějaká funkce...
Pokud chceš něco z "program.cs" použít ve "Form1", tak ten form musí vědět o tom program.cs, tzn, že musíš mít ve Form1 instanci toho program.cs.

Editováno 24.3.2020 11:26
Nahoru Odpovědět
24.3.2020 11:25
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Sperhak
Člen
Avatar
Sperhak:24.3.2020 14:04

Michal Štěpánek ano už som asi pochopil mal som kód.

int nakazeny()
            {
                foreach (HtmlNode row in rows)
                {
                    HtmlNodeCollection columns = row.SelectNodes("td");
                    if (columns[0].InnerText == country)
                    {
                        return int.Parse(Regex.Replace(columns[1].InnerText, "[^.0-9]", ""));
                    }
                }
                 throw new Exception("Stát nenalezen!");
            }

A do msgboxu som používal nakazeny() a vypísalo my to číslo myslel som si že tým intom je to zadefinované ako premenná ale asi je to funkcia však?
Tak som napísal string strnakazeny = nakazeny().ToS­tring();
a to strnakazeny už je premenná že?

"Pokud chceš něco z "program.cs" použít ve "Form1", tak ten form musí vědět o tom program.cs, tzn, že musíš mít ve Form1 instanci toho program.cs."
ale na toto som stále neprišiel ako sa robí.

 
Nahoru Odpovědět
24.3.2020 14:04
Avatar
Odpovídá na Sperhak
Michal Štěpánek:24.3.2020 17:36

A co vlastně v tom program.cs máš, že to potřebuješ použít ve formu? To by měla být podle mě statická třída, kterou vytváří VS při vytvoření projektu a v ní by měly být deklarovány maximálně statické proměnné. Pokud chceš něco provádět v nějaké třídě mimo form (tak by to mělo být), měl by sis nějakou třídu vytvořit sám.
Např.:

public class Machine
    {
        public int Id { get; set; }
        public string Nazev {get; set;}
        public string Popis { get; set; }

    }

a pak ve formu dáš instanci té třídy, např.:

public partial class Form1 : Form
    {
        Machine m = new Machine();
        public Form1()
        {
            InitializeComponent();
           //příklad použití proměnné z té třídy
            m.Nazev = "Pepa";
        }
    }
Nahoru Odpovědět
24.3.2020 17:36
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Sperhak
Člen
Avatar
Odpovídá na Michal Štěpánek
Sperhak:24.3.2020 21:02

Program m = new Program(); som skúšal dať do form no vypisovalo mi niečo take že to nemôžem použit na static class
public int nakazeny() ked som dal pred int alebo string public tak mi tam povyskakovalo červene more chyb.
Ale poradil som si, vyriešil som to inak. Celý program z program.cs som presunul do form a z program.cs spúštam iba ten form. A funguje to krásne. Teraz sa budem hrať s grafikou to nieje také zložite nato je kopa návodou.
Mojim cielom by bolo aby sa to dalo nainštalovať a vyzeralo by to takto https://i.stack.imgur.com/Uhv9q.png len namiesto rýchlostí by tam boli počty nakazených.Ale nato som našiel asi 2 vlákna na jednom fóre, takže to určite nedokážem.

 
Nahoru Odpovědět
24.3.2020 21:02
Avatar
Sperhak
Člen
Avatar
Sperhak:24.3.2020 21:03

public int nakazeny() ked som dal pred int alebo string dal public tak mi tam povyskakovalo červene more chyb.

 
Nahoru Odpovědět
24.3.2020 21:03
Avatar
Odpovídá na Sperhak
Michal Štěpánek:25.3.2020 7:57

Chyby ti tam vyskákaly, protože je to statická třída, jak jsem psal před tím.
Z hlediska OOP bys ale funkce měl mít oddělené od formu ve vlastní třídě (priklad jsem psal taky výše)

Nahoru Odpovědět
25.3.2020 7:57
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Sperhak
Člen
Avatar
Sperhak:25.3.2020 11:58

Ahojte kolega vyššie mi napísal tento kód

public static int getByCountry(string country)
{
    HtmlWeb htmlWeb = new HtmlWeb();
    HtmlDocument document = htmlWeb.Load("https://www.worldometers.info/coronavirus/");
    HtmlNodeCollection rows = document.DocumentNode.SelectNodes("//*[@id=\"main_table_countries_today\"]/tbody[1]/tr");

    foreach (HtmlNode row in rows)
    {
        HtmlNodeCollection columns = row.SelectNodes("td");
        if (columns[0].InnerText == country)
        {
            return int.Parse(Regex.Replace(columns[1].InnerText, "[^.0-9]", ""));
        }
    }

    throw new Exception("Stát nenalezen!");
}

Ja som si ho upravil na tento

string country = ("Slovakia");
            HtmlWeb htmlWeb = new HtmlWeb();
            HtmlAgilityPack.HtmlDocument document = htmlWeb.Load("https://www.worldometers.info/coronavirus/");
            HtmlNodeCollection rows = document.DocumentNode.SelectNodes("//*[@id=\"main_table_countries_today\"]/tbody[1]/tr");

            string nakazeny = "";
           {
                foreach (HtmlNode row in rows)
                {
                    HtmlNodeCollection columns = row.SelectNodes("td");
                    if (columns[0].InnerText == country)
                    {
                        nakazeny = columns[1].InnerText;

                    }
                }
              }

a tiež mi funguje a vyzerá jednoduchšie.Vedeli by ste mi nejak vysvetliť funkciu toho Parse(Regex.Replace a throw new Exception("Stát nenalezen!"); totiž robilo mi to problémy ked tá zdrojová tabulka na servery neobsahovala číslo.Teraz s mojim kódom mi to funguje.

 
Nahoru Odpovědět
25.3.2020 11:58
Avatar
Odpovídá na Sperhak
Michal Štěpánek:25.3.2020 13:26

Throw new Exception je vyvolání výjímky, když neexistuje nějaký údaj. Když proceduru nebo funkci spustíš v try-catch bloku, můžeš v něm ošetřit, jak se má program chovat při té výjímce

try
            {
                //nějaká funkce
            }
//tady se nastaví co se má stát, když se vyvolá výjímka
            catch (Exception ex)
            {
                MessageBox.Show("Export dat se nezdařil - " + ex.Message, "Chyba", MessageBoxButton.OK, MessageBoxImage.Exclamation);
            }
//tento kus (finnaly) se použít nemusí, ale může, když chceš, aby se něco provedlo i při vyvolání výjímky
finally
{
//toto se provede v každém případě
}

P.S. Všechno je to popsáno tady na itnetwork v tutoriálech. Neměl bys přeskakovat v učení začátky, jinak se v tom budeš jen plácat a budeš páchat slepeniny místo správně psaných programů.

Editováno 25.3.2020 13:28
Nahoru Odpovědět
25.3.2020 13:26
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Sperhak
Člen
Avatar
Odpovídá na Michal Štěpánek
Sperhak:26.3.2020 22:11

Ahoj neviem kde robím chybu snažím sa rozložiť si program do jednotlivých súborov no nechce mi to na seba nadviazať.
Mám súbor Scrapper.cs a v ňom tento kód

using HtmlAgilityPack;

namespace Corona
{
   public class Scrapper
    {

        public void scrappovat()
        {

            string country = ("Slovakia");
            HtmlWeb htmlWeb = new HtmlWeb();
            HtmlAgilityPack.HtmlDocument document = htmlWeb.Load("https://www.worldometers.info/coronavirus/");
            HtmlNodeCollection rows = document.DocumentNode.SelectNodes("//*[@id=\"main_table_countries_today\"]/tbody[1]/tr");

            {
                foreach (HtmlNode row in rows)
                {
                    HtmlNodeCollection columns = row.SelectNodes("td");
                    if (columns[0].InnerText == country)
                    {
                        string nakazeny = columns[1].InnerText;
                        string mrtvy = columns[3].InnerText;
                        string vylieceny = columns[5].InnerText;
                    }

                }
            }
        }
    }

}

Potom mám súbor Form1.cs a vnom tento kód

using System.Windows.Forms;
using System.Media;

namespace Corona
{
    public partial class Form1 : Form
    {

        Scrapper scrapper = new Scrapper();
        public Form1()
        {

            scrapper.scrappovat();
            InitializeComponent();



            label1.Text = scrapper.nakazeny;
            label2.Text = scrapper.mrtvy;
            label3.Text = scrapper.vylieceny;

Neviem kde robím chybu ale ten súbor form1.cs nevidí premenné zo súboru Scrapper.cs pričom tam mám public class a aj tento riadok Scrapper scrapper = new Scrapper(); ktorý by ma mal odkázať na celý ten súbor nie?

 
Nahoru Odpovědět
26.3.2020 22:11
Avatar
Odpovídá na Sperhak
Michal Štěpánek:26.3.2020 23:00

Scrapovat() ti vytvoří vypis (list) hodnot a to se nedá zobrazit v jednom labelu, musíš na to použít datagrid, nebo listview

Nahoru Odpovědět
26.3.2020 23:00
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Sperhak
Člen
Avatar
Sperhak:27.3.2020 12:57

Tak som znova pokročil, prišiel som nato ako si odkazovať na jednotlivé subory voidy a classy. Myslím že už mi to celkom ide.Vytvoril som si tam aj form nastavenia kde si viete nastavovať veci. Chcel by som aby sa tie nastavenia niekam ukladali aj po ukončení programu a znova sa načítali keď sa program spustí.
Našiel som však kopu rôznych spôsobov ako to spraviť. Ktorý by ste mi odporučili vy?

 
Nahoru Odpovědět
27.3.2020 12:57
Avatar
Sperhak
Člen
Avatar
Sperhak:27.3.2020 16:37

Použil som tento navod a funguje mi to dobre https://docs.microsoft.com/…-with-csharp

 
Nahoru Odpovědět
27.3.2020 16:37
Avatar
Odpovídá na Sperhak
Michal Štěpánek:29.3.2020 14:04

Pokud ti to vyhovuje, je to OK. Jinak bys mohl pro "nastavení" použít ukládání např. do *.ini nebo *.xml souborů a při spuštění aplikace to z toho souboru zase načíst...

Nahoru Odpovědět
29.3.2020 14:04
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Sperhak
Člen
Avatar
Sperhak:31.3.2020 11:58

Ahojte zasa si neviem rady. Potreboval by som aby mi program vypísal do comboboxu zoznam krajín.Skúšam to zatial s konzolou. Mám túto časť kódu

foreach (HtmlNode row in rows)
                  {

                      HtmlNodeCollection columns = row.SelectNodes("td");
                      countryname = columns[0].InnerText;
                      Console.WriteLine(countryname);

Funguje dobre ale ked vo forme napíšem

public Form1()
        {
Console.WriteLine(scrapper.countryname);

Tak sa vypíše len jedna krajna.
Potreboval by som to nejak vyriešiť.

 
Nahoru Odpovědět
31.3.2020 11:58
Avatar
Odpovídá na Sperhak
Michal Štěpánek:31.3.2020 12:57

Ty krajiny musíš vypsat do nějaké kolekce a tu kolekci pak vzít jako zdroj dat pro combobox, nebo při procházení krajin je musíš plnit do toho comboboxu.
Evidentně jsi přeskočil několik lekcí při učení. Vrať se k učení, prostuduj si místní tutoriály a pak teprve páchej takový program.
Většina toho, na co se tu ptáš jsou základy programování a je to všechno tady v tutoriálech popsáno...

Editováno 31.3.2020 12:58
Nahoru Odpovědět
31.3.2020 12:57
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Sperhak
Člen
Avatar
Odpovídá na Michal Štěpánek
Sperhak:31.3.2020 15:14

No našiel som si tie kolekcie. Funguje mi to v tom súbore scrapper. Ale ked to chcem aby mi to išlo aj v tom Forme tak neviem ako to napísať lebo ten
var countryname = new List<string>();
neviem dať ako public

 
Nahoru Odpovědět
31.3.2020 15:14
Avatar
Michal Štěpánek:31.3.2020 15:37

Nepoužívej zbytečně "var", kde nemusíš. To se používá ve chvíli, kdy nevíš, jakého typu bude ta proměnná nebo kolekce
ve třídě deklaruješ list

Public List<string> countryname;

a pak ho aplikuješ

countryname = new List<string>();
Editováno 31.3.2020 15:38
Nahoru Odpovědět
31.3.2020 15:37
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Sperhak
Člen
Avatar
Odpovídá na Michal Štěpánek
Sperhak:31.3.2020 20:58

Dakujem toto som aj písal public List<string> countryname; a skúšal ale toto som už nevedel že treba countryname = new List<string>(); vdaka už to ide.

 
Nahoru Odpovědět
31.3.2020 20:58
Avatar
Døminik
Člen
Avatar
Døminik:31.3.2020 22:41

Ahoj, na tohle jsem se taky ptal. Řekli mi, že tu tabulku nemůžu zveřejnit. Aby jsi měl na to právo prý si to musíš zaplatit. Možná z toho můžou být problémy

 
Nahoru Odpovědět
31.3.2020 22:41
Avatar
Sperhak
Člen
Avatar
Sperhak:1.4.2020 9:16

Ahoj no popravde ma napadlo aj to že by som spravil aplikáciu na android a dal to na play. Ale napadlo ma že tá stránka z ktorej čerpám dáta nieje moja a určite by sa im to nepáčilo keby sa to dozvedeli. Takto to mám len pre seba, ukázal som to pár kamarátom a keď s tým budem spokojný dám to sem do vlákna nech sa podelím.Hlavne s ludmi čo mi pomáhali.

 
Nahoru Odpovědět
1.4.2020 9:16
Avatar
Sperhak
Člen
Avatar
Sperhak:3.4.2020 13:03

Ahoj mám problém. Program sa mi občas nie vždy ukončí a vypíše mi tento dôvod
The program '[12700] Corona.exe' has exited with code -1073741819 (0xc0000005) 'Access violation'.
Hľadal som na nete, ale je tam toho strašne veľa a nevyznám sa v tom, ale ak som dobre pochopil tak je to niečo s pamätou.

 
Nahoru Odpovědět
3.4.2020 13:03
Avatar
Sperhak
Člen
Avatar
Odpovídá na Sperhak
Sperhak:3.4.2020 15:35

V kóde chybu nevidím a prišiel som nato kedy mi to robí. Ked prehrávam jednu pesničku ktorá má cca 4MB a dávam často načítavať dáta z tej stránky. Ked púšťam inú pesničku ktorá ma cca 1MB tak to nerobí. Ale predsa by nemal byť problém aby mala pesnička hocakú veľkosť, nie?

 
Nahoru Odpovědět
3.4.2020 15:35
Avatar
Odpovídá na Sperhak
Michal Štěpánek:3.4.2020 15:46

Podle mě se písnička načte do paměti, aby se mohla přehrávat, čím "větší" písnička, tím více paměti a při opakovaném načítání dat z toho tvého programu dojde k přetečení paměti...

Nahoru Odpovědět
3.4.2020 15:46
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Sperhak
Člen
Avatar
Sperhak:4.4.2020 9:04

Ahoj pesničky sa mi ukladajú/kódujú do .exe súboru.Pomohlo by ak by som ich ukladal do priečinka s exe súborom a načítaval odtiaľ? Hľadal som niečo o tej pamäti či sa nedá zväčšiť no nič som nenašiel. Dočítal som sa že tú pamäť prideľuje windows a nedá sa zväčšiť. Príde mi to nejaké divné že prečo mu nepridelí viac tej pamäte keď ju ten program potrebuje.

 
Nahoru Odpovědět
4.4.2020 9:04
Avatar
Sperhak
Člen
Avatar
Sperhak:4.4.2020 10:52

Ahoj tak som to skúsil. Vo VS som v resources u tých 2 pesničiek dal copy always a oni sa mi teraz automaticky nakopírujú do zložky s programov. Odtiaľ ich načítavam v programe a funguje to pamäť mi už nepreteká. Ale mám taký malý problém. Ako odstránim tú pesničku aby sa nekódovala do programu exe. Totiž ak to mám takto má program 7MB ak z resource odstránim obe pesničky má program 1MB, ale to ich už musím manuálne zakaždým pridávať to tej výslednej zložky s programom. Dá sa tam nejak nastaviť aby boli tie pesničky evidované vo VS a tam mám to copy always aby sa kopírovali do tej zložky, ale už sa nekódovali do exe súboru aby mal 1MB. Dúfam že chápeš je to trochu krkolomne napísané.

 
Nahoru Odpovědět
4.4.2020 10:52
Avatar
Sperhak
Člen
Avatar
Sperhak:15.4.2020 13:29

Tak som program dokončil už sa mi nechce ďalej bádať a ani ma nenapadajú ďalšie nápady čo by som tam pridal, takže kto chce môže si ho stiahnuť. download

 
Nahoru Odpovědět
15.4.2020 13:29
Avatar
zelvicek
Člen
Avatar
Odpovídá na Sperhak
zelvicek:15.4.2020 14:27

Dovolím si nevyžádanou recenzi. Aplikaci jsem neinstaloval, jen narychlo prozkoumal kód.

  1. Chybí ošetření vyjímek (zejména) při stahování a parsování.
  2. Bylo by dobré data stahovat a parsovat async nebo v BackgroundWorker.
  3. Nenašel jsem tlačítko refresh (byť je to možno udělat změnou státu).
  4. při změně státu vždy stahuješ všechna data - je to trošku plýtvání.
  5. cacheování pomocí HTTP hlaviček funguje?
  6. EXE obsahuje streamy pesniček - viz tvůj nedávný komentář. Nebo v přehrávači používat streamy z EXE a nedistribuovat je jako samostatné soubory.

To jen tak, kdyby ses nudil a chtěl udělat final-final :-).

 
Nahoru Odpovědět
15.4.2020 14:27
Avatar
Sperhak
Člen
Avatar
Sperhak:15.4.2020 16:22

Kludne kritika je vítaná. Ako som už viac krát písal niesom programátor a ani nechcem byť, len som si chcel spraviť takúto aplikáciu, tak som tak povediac nakukol do tejto oblasti. Rozpíšem sa k tvojim bodom (k niektorým možno drzo :D).
1.Akých výnimiek?
2.Koho? :D
3.No refresh by som vedel spraviť, ale v pláne nebol. Otvorím aplikáciu kuknem si stav, hlavne na Slovensku a zavriem ju. Takže refresh som nepotreboval.
4.Hej to ma napadlo tak 2 verzie dozadu že by som to stiahol a potom triedil, ale už sa mi s tým nechcelo robiť, hlavne som nevedel ako na to, a až tak mi to nevadí. Ale hej o tejto chybe/nedostatku viem.
5.Netuším :D
6.Hej aj o tejto chybe viem, len sa mi nepodarilo zistiť ako, tie pesničky nezakomponovať do exe tak je to takto. Je to o 6MB väčšie než by mohlo, ale má to dokopy len 14MB takže som sa s tým uspokojil.

 
Nahoru Odpovědět
15.4.2020 16:22
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 44 zpráv z 44.