Nefunguje načtení řetězců ze souboru – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Nefunguje načtení řetězců ze souboru – .NET – Fórum – Programujte.comNefunguje načtení řetězců ze souboru – .NET – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
balabal
~ Anonymní uživatel
12 příspěvků
8. 1. 2013   #1
-
0
-

Ahoj,
proč když chci uložit do proměnné row[] dva řádky, které jsou v textovém dokumentu tak mi to napíše tuto chybovou hlášku? Index was outside the bounds of the array.

        private string name;
        private string password;
        private string[] row;

        public bool result;

        public UserLogin(string nm, string pw)
        {
            this.name = nm;
            this.password = pw;
            row = new string[2];

            Check();
        }

        private void Check()
        {
            FileStream fs = new FileStream("users.TXT", FileMode.Open, FileAccess.Read);
            StreamReader sr = new StreamReader(fs, Encoding.UTF8);
            int i = 0;

            while (sr != null)
            {
                row[i++] = sr.ReadLine();
            }

            sr.Close();

            if (name == row[0])
            {
                if (password == row[1]) 
                { 
                    result = true; 
                }
                else result = false;
            }
        }

        public bool Result
        {
            get
            {
                return result;
            }
        }
Nahlásit jako SPAM
IP: 85.132.184.–
Reklama
Reklama
Mutagen0
Super člen
8. 1. 2013   #2
-
0
-

Nejsem si jist ale zkus tohle (nemám vyzkoušený nic, jen ěm to napadlo)

while (sr != null)
{
	row[i] = sr.ReadLine();
	i++;
}
Nahlásit jako SPAM
IP: 89.190.90.–
balabal
~ Anonymní uživatel
12 příspěvků
8. 1. 2013   #3
-
0
-

to udělá to samý :X

Nahlásit jako SPAM
IP: 85.132.184.–
Mutagen0
Super člen
8. 1. 2013   #4
-
0
-

#3 balabal
No tak tam asi v tom textáku máš víc řádku než 2 zkus tohle

for (int i = 0; i < 2; i++)
	row[i] = sr.ReadLine();
Nahlásit jako SPAM
IP: 89.190.90.–
Vaizo0
Stálý člen
8. 1. 2013   #5
-
0
-

Z hlavy bych řekl, že máš špatně tu podmínku: while (sr != null). sr nikdy nebude null.

Nemělo by tam být něco takového?

string line;
while((line = reader.ReadLine()) != null) { ... } 
Nahlásit jako SPAM
IP: 213.194.218.–
Grungy0
Super člen
8. 1. 2013   #6
-
0
-

Pretože táto podmienka v tomto cykle

while (sr != null)
{
	row[i++] = sr.ReadLine();
}

bude platiť aj pre i = 2,3,4 .... a ako ti napovedá hláška budeš mimo rozsahu definovaného poľa.

Nahlásit jako SPAM
IP: 188.123.100.–
Prvý náznak hlúposti, je pocit geniality.
balabal
~ Anonymní uživatel
12 příspěvků
8. 1. 2013   #7
-
0
-

Mutagen: řádky tam mám opravdu jen dva :)
 

string line;
while((line = reader.ReadLine()) != null) { ... } 

S touto podmínkou mi to už chybu nehlásí, ale když do obou textboxů zadám ty řetězce které mám v txt souboru, tak mi to stejně neudělá to co chci :( viz níž

        private void Login(object sender, RoutedEventArgs e)
        {
            UserLogin login = new UserLogin(txtLogin.Text, txtPw.Text);

            if (login.Result == true)
            {
                Close();
            }
        }
Nahlásit jako SPAM
IP: 85.132.184.–
Vaizo0
Stálý člen
8. 1. 2013   #8
-
0
-

Ještě jedna věc ...

Nestačilo by místo

if (password == row[1]) 
{ 
	result = true; 
}
else result = false;

Napsat jen:

result = (name == row[0]) && (password == row[1]);

A vůbec bys mohl používat jen Result {get; set;} a né to tam mít dvakrát.

Nahlásit jako SPAM
IP: 213.194.218.–
balabal
~ Anonymní uživatel
12 příspěvků
8. 1. 2013   #9
-
0
-

ano to bych mohl :) Moc dlouho neprogramuji tak to hned nevidím, díky ;) ale bohužel mi to pořád nedělá to co chci :/

Nahlásit jako SPAM
IP: 85.132.184.–
Mutagen0
Super člen
8. 1. 2013   #10
-
0
-

#9 balabal
Tak si dej debug programu a zjistuj postupnýmy kroky kde se to sekne.

Nahlásit jako SPAM
IP: 89.190.90.–
balabal
~ Anonymní uživatel
12 příspěvků
8. 1. 2013   #11
-
0
-

no tak už vím že v poli jsou správné hodnoty, ale když to má porovnat ty hodnoty v poli row se zadanýma do textboxů, tak mi to hodí false a ne true... a z toho jsem opravdu mimo, protože tam snad žádnou chybu nevidím :O

Nahlásit jako SPAM
IP: 85.132.184.–
Vaizo0
Stálý člen
8. 1. 2013   #12
-
0
-

#11 balabal

A nemáš v tom texťáku náhodou třeba nějaké mezery nebo taby navíc?

Nahlásit jako SPAM
IP: 213.194.218.–
Mutagen0
Super člen
8. 1. 2013   #13
-
0
-

#11 balabal
Tak si dej debug na to pole rows[] a tam se mrkni zda se ti tam nahrajou hodnoty a pokud jo tak hledej chybu v tom public bool Result();

a když ti projde přes debug jako v pohodě tohle

if (name == row[0])
            {
                if (password == row[1])
                {
                    result = true;
                }
                else result = false;
            }

Tak máš chybu tam jak jsem psal

Nahlásit jako SPAM
IP: 89.190.90.–
balabal
~ Anonymní uživatel
12 příspěvků
8. 1. 2013   #14
-
0
-

mezery ani taby navíc tam nejsou... první řádek mám jen písmeno A a v druhém taky... (na zkoušku)

Mutagen: hodnoty se tam nahrajou, ale nepřejde to ten if :/ a tím pádem to rovnou skočí na false...

Nahlásit jako SPAM
IP: 85.132.184.–
balabal
~ Anonymní uživatel
12 příspěvků
8. 1. 2013   #15
-
0
-

a když si ještě ověřím kolik je znaků v textboxu tak mi to vypisuje správně jeden 

Nahlásit jako SPAM
IP: 85.132.184.–
Mutagen0
Super člen
8. 1. 2013   #16
-
0
-

Tak dej debug na ten if a koukni se co tam porovnává a snad najdeš chybu ... Jinak už nevím, ale měl bys to mít dobře.

Nahlásit jako SPAM
IP: 89.190.90.–
balabal
~ Anonymní uživatel
12 příspěvků
8. 1. 2013   #17
-
0
-

před tím ifem mi debug hodí upozornění a pokaždé to přeskočí O.o takže do toho nemůžu vlézt... fakt nevím co s tím je! :/

Nahlásit jako SPAM
IP: 85.132.184.–
Mutagen0
Super člen
8. 1. 2013   #18
-
0
-

Přesně takhle mi to funguje!

 Tvuj Class.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace Zkousky
{
    public class Login
    {
        private string name;
        private string password;
        private string[] row;

        public bool result;

        public Login(string nm, string pw)
        {
            this.name = nm;
            this.password = pw;
            row = new string[2];

            Check();
        }

        private void Check()
        {
            FileStream fs = new FileStream("users.TXT", FileMode.Open, FileAccess.Read);
            StreamReader sr = new StreamReader(fs, Encoding.UTF8);
            for (int i = 0; i < 2; i++)
                row[i] = sr.ReadLine();

            sr.Close();

            if (name == row[0])
            {
                if (password == row[1]) 
                { 
                    result = true; 
                }
                else result = false;
            }
        }

        public bool Result
        {
            get
            {
                return result;
            }
        }
    }
}

Ve formu

Login log = new Login("a", "s");
if (log.Result) label1.Text = "True";
else label1.Text = "False";

A tohle mi funguje ... při obouch "a" vyhodí true a jinak false

Nahlásit jako SPAM
IP: 89.190.90.–
balabal
~ Anonymní uživatel
12 příspěvků
8. 1. 2013   #19
-
0
-

no já dělám přes WPF, ale v tom by neměl být rozdíl... ikdyž jsem si to přesně zkopíroval jako to máš ty, tak mi to stejně nejeje... nechápu co to je :X

Nahlásit jako SPAM
IP: 85.132.184.–
Mutagen0
Super člen
8. 1. 2013   #20
-
0
-

#19 balabal
A přejmenoval sis namespace? ... Prostě tohle mi funguje, pokud ti to nejde tak kde máš chybu fakt nevím.

Nahlásit jako SPAM
IP: 89.190.90.–
balabal
~ Anonymní uživatel
12 příspěvků
8. 1. 2013   #21
-
0
-

ani když znovu založím nový WPF, tak to nefunguje... nepracuje tedy WPF nějak jinak?

Nahlásit jako SPAM
IP: 85.132.184.–
Mutagen0
Super člen
8. 1. 2013   #22
-
0
-

#21 balabal
No tak ale přeci streamread je stejnej ne?

Jinak dal jsis debug na class? jako přímo na řádky

if (name == row[0])
            {
                if (password == row[1])
                {
                    result = true;
                }
                else result = false;
            }

?

protože jestli ti to porjde pře if nebo ne ... nebo rovnou skocí na false? jedine že by e to do pole nenahrálo a pak porovnávalo špatný hodnoty ale to je ai nesmysl ...

Nahlásit jako SPAM
IP: 89.190.90.–
balabal
~ Anonymní uživatel
12 příspěvků
8. 1. 2013   #23
-
0
-

projížděl jsem vše... nejdříve to jede ve wpr, pak to skočí do clasy a projede to celou clasu... pak zpět do wpf na ten if a tam mi to vyhodí nějakou hlášku(ano/ne)... a pak mi to celý přeskočí :P

Nahlásit jako SPAM
IP: 85.132.184.–
Mutagen0
Super člen
8. 1. 2013   #24
-
0
-

#23 balabal
Aha tak ty asi nechápeš jak debugnout class? Rikal jsem dej si breakpoint na ty radky v class a tam ti program stopne a ty se podívaš zda tam jsou udaje nebo ne ... jak jsme psal mě to funguje bez problemu.

Nahlásit jako SPAM
IP: 89.190.90.–
balabal
~ Anonymní uživatel
12 příspěvků
8. 1. 2013   #25
-
0
-

vím jak debugnout class! ale říkám, že mi to vyhodí nějakej žblebt... a už mi to funguje ;) ale nevím kde byla chyba, založil jsem ten WPF po třetí :P ale jinak všem díky :)

Nahlásit jako SPAM
IP: 85.132.184.–
Vaizo0
Stálý člen
9. 1. 2013   #26
-
0
-

#25 balabal
Tak označ prosím vlákno za vyřešené  

Nahlásit jako SPAM
IP: 94.113.35.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 111 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý