Diskuze: Obchodní čtečka kódů

C# .NET .NET (C# a Visual Basic) Obchodní čtečka kódů American English version English version

Aktivity (1)
Avatar
mlnice
Člen
Avatar
mlnice:27.12.2014 16:09

Ahoj,
prosím vás, potřeboval bych poradit s jedním programem.
Vytvořil jsem si v textovém dokumentu soubor data.csv, kam bych chtěl postupně vkládat zboží(jde pouze o simulaci) v podobě

135897156716 ; Banany ; 14.50 ; 500
646497521399 ; 3bit ; 9.90 ; 400

První je načtený kód, pak název zboží, cena a množství. V programu mám 4 textové pole, do prvního se vloží kód zboží a po stisknutí na tlačítko se k tomuto danému číslu načtou zbylé informace o konkrétním zboží do zbylých textboxů.
Přidávám kód jak jsem se o to pokoušel já sám, ale bohužel tomu moc nerozumím, nemohli by jste mi poradit aby to v tom CSV opravdu vyhledávalo podle té první informace? Děkuji

private void hledani()
{
var reader = new StreamReader(Fi­le.OpenRead(@"da­ta.csv"));
List<string> listA = new List<string>();
List<string> listB = new List<string>();
List<string> listC = new List<string>();
List<string> listD = new List<string>();
while (!reader.EndOf­Stream)
{
var line = reader.ReadLine();
var values = line.Split(';');

listA.Add(kod­zbozi.Text);
listB.Add(valu­es[1]);
listC.Add(valu­es[2]);
listD.Add(valu­es[3]);

nazevzbozi.Text = values[1].ToS­tring();
cenazbozi.Text = values[2].ToS­tring();
mnozstvizbozi.Text = values[3].ToS­tring();

}

}

Editováno 27.12.2014 16:09
 
Odpovědět 27.12.2014 16:09
Avatar
Odpovídá na mlnice
Ondřej Štorc:27.12.2014 16:46

Takže já bych to udělal takto. Nejdříve bych si vytvořil nějakou strukturu která by obsahovala položky: Kód zboží, název, cena a počet kusů. To by vypadalo například nějak takto:

struct Zbozi
    {
        public int KodZbozi;
        public string NazevZbozi;
        public double Cena;
        public int PocetKusu;
        public Zbozi(int KodZbozi, string NazevZbozi, double Cena, int PocetKusu)
        {
            this.KodZbozi = KodZbozi;
            this.NazevZbozi = NazevZbozi;
            this.Cena = Cena;
            this.PocetKusu = PocetKusu;
        }
    }

A k nalezení prvku s určitým číslem objednávky bych použil tuhle metodu:

private Zbozi najdiZbozi(int kodZbozi)
            {
                Zbozi hledanyProdukt = zboziNaSklade.Find(x => x.KodZbozi == kodZbozi);
                return hledanyProdukt;
            }

Kdy zboziNaSkladě je kolekce, v mém přpadě typu list

Nahoru Odpovědět 27.12.2014 16:46
Život je příliš krátký na to, abychom bezpečně odebírali USB z počítače..
Avatar
mlnice
Člen
Avatar
Odpovídá na Ondřej Štorc
mlnice:27.12.2014 17:06

Děkuji, a co znamená prosím konkrétně ta datová struktura? Nevím jak to mám přesně vložit do toho kódu. Pochopil jsem, že třeba:

Zbozi hledanyProdukt = listB.Find(x => x.KodZbozi == kodZbozi);

tenhle kod chápu jakože hledanýprodukt bude hledat listB, podle KodZbozi, ale když místo KodZbozi dosadím listA, jakože podle listuA, tak to nefunguje

 
Nahoru Odpovědět 27.12.2014 17:06
Avatar
Odpovídá na mlnice
Ondřej Štorc:27.12.2014 17:16

Ta struktura vlastně zabalí ty 4 předměty do jednoho objektu takže nemusíš mít 4 listy ale jenom jeden. Jinak ta struktura je hodně podobná třídě

Nahoru Odpovědět 27.12.2014 17:16
Život je příliš krátký na to, abychom bezpečně odebírali USB z počítače..
Avatar
mlnice
Člen
Avatar
mlnice:27.12.2014 17:44

Aha, ale jak ta struktura pozná, že mám jednotlivé položky odděleny středníkem?

 
Nahoru Odpovědět 27.12.2014 17:44
Avatar
Odpovídá na mlnice
Ondřej Štorc:27.12.2014 18:19

Nepozná musíš jí to naparsovat třebat takto:

private Zbozi naparsujZbozi(string csv)
            {
                string[] temp = csv.Split(';');
                return new Zbozi(Convert.ToInt32(temp[0]), temp[1], Convert.ToDouble(temp[2]),Convert.ToInt32(temp[3]));
            }


private void pridejZbozi(string soubor)
            {
                using (StreamReader sr = new StreamReader(soubor))
                {
                    string s;
                    while ((s = sr.ReadLine()) != null)
                    {
                        zboziNaSklade.Add(naparsujZbozi(s));
                    }
                }
            }

Samozřejmě to není dokonalý kód ale základ v tom je

Editováno 27.12.2014 18:21
Nahoru Odpovědět 27.12.2014 18:19
Život je příliš krátký na to, abychom bezpečně odebírali USB z počítače..
Avatar
mlnice
Člen
Avatar
mlnice:12.1.2015 20:08

Tak se to tak nějak snažím pořád dávat do kupy a moc se mi to nedaří :( nemohl by jsi mi prosím udělat nějakou funkční ukázku? Jsem v tom opravdu začátečník Děkuju :)

 
Nahoru Odpovědět 12.1.2015 20:08
Avatar
lukas2901
Člen
Avatar
Odpovídá na mlnice
lukas2901:13.1.2015 9:12

Ukázku ti tu už několikrát postoval

 
Nahoru Odpovědět 13.1.2015 9:12
Avatar
mlnice
Člen
Avatar
mlnice:13.1.2015 18:07

Já jen nevím jak definovat to zboziNaSklade :(

 
Nahoru Odpovědět 13.1.2015 18:07
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na mlnice
Jan Vargovský:13.1.2015 18:19
List<Zbozi> zboziNaSklade = new List<Zbozi>()
 
Nahoru Odpovědět 13.1.2015 18:19
Avatar
mlnice
Člen
Avatar
mlnice:13.1.2015 18:23

Aha, děkuju, ale musel jsem to dát zvlášť do pridejZbozi a najdiZbozi. A když chci aby se to pak vypsalo každá položka do jiného textboxu? :)

 
Nahoru Odpovědět 13.1.2015 18:23
Avatar
Lukáš Křehula
Redaktor
Avatar
Odpovídá na mlnice
Lukáš Křehula:13.1.2015 18:25

Nebylo by vhodnější použít listBox?

 
Nahoru Odpovědět 13.1.2015 18:25
Avatar
mlnice
Člen
Avatar
mlnice:13.1.2015 18:31

listBox použít neumím :(

 
Nahoru Odpovědět 13.1.2015 18:31
Avatar
mlnice
Člen
Avatar
mlnice:13.1.2015 18:39

Nevím jak udělat to zapisování

 
Nahoru Odpovědět 13.1.2015 18:39
Avatar
mlnice
Člen
Avatar
mlnice:13.1.2015 18:44

Nemohl by prosím někdo ochotný třeba na ICQ nebo Skype prosím? :)

 
Nahoru Odpovědět 13.1.2015 18:44
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na mlnice
Jan Vargovský:13.1.2015 21:22

Pošli nám celý projekt tady (nebo podstatnou část kódu), k tomu nám napiš co přesně má program dělat.

Používej tlačítko odpovědět, pak bych si tvé odpovědi všiml dříve.

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