Forum » Programiranje » VC# čitanje iz datoteke in shranjevanje v polje
VC# čitanje iz datoteke in shranjevanje v polje
iceurb ::
Imam problem in sicer hočem čitati iz datoteke podatke in jih shraniti v polje (class). Zdaj pa če kodo zaženem mi javi napako NullReferenceException was unhandled ... Object reference not set to an instance of an object.
še slika:
napaka
in koda:
public Form1()
{
InitializeComponent();
sadje[] podatki= new sadje[2];
int stevilo=0;//dejansko št podatkov..
int maxx=2;//max št podatkov
// meni();
citaj( podatki, ref stevilo, maxx);
}
class sadje
{
public string ime; //ime nečesa
public int stevilo; // stevilo elementov, katerih ime je opisano v prejšnji vrstici
};
void citaj( sadje [] pol1,ref int st1, int n1max)
{
System.IO.StreamReader text_datin = //simbolično ime
new System.IO.StreamReader("podatki.txt"); //pot na disku
string st;
st1 = 0;
while((text_datin.ReadLine() != null)||(st1< n1max))//prečitaj vse podatke iz datoteke
{ // razen, če jih je preveč
pol1[st1].ime=text_datin.ReadLine();// ime prečitam v polje
st=text_datin.ReadLine();//stevilo elementov prečitanm v polje
pol1[st1].stevilo = Int32.Parse(st); //iz string pretvorim v st
st1=st1+1; //podatek obstaja, to si zapomnim
if(st1>=n1max)
{
//izpis v labelo
}
}
text_datin.Close();
}
še slika:
napaka
in koda:
public Form1()
{
InitializeComponent();
sadje[] podatki= new sadje[2];
int stevilo=0;//dejansko št podatkov..
int maxx=2;//max št podatkov
// meni();
citaj( podatki, ref stevilo, maxx);
}
class sadje
{
public string ime; //ime nečesa
public int stevilo; // stevilo elementov, katerih ime je opisano v prejšnji vrstici
};
void citaj( sadje [] pol1,ref int st1, int n1max)
{
System.IO.StreamReader text_datin = //simbolično ime
new System.IO.StreamReader("podatki.txt"); //pot na disku
string st;
st1 = 0;
while((text_datin.ReadLine() != null)||(st1< n1max))//prečitaj vse podatke iz datoteke
{ // razen, če jih je preveč
pol1[st1].ime=text_datin.ReadLine();// ime prečitam v polje
st=text_datin.ReadLine();//stevilo elementov prečitanm v polje
pol1[st1].stevilo = Int32.Parse(st); //iz string pretvorim v st
st1=st1+1; //podatek obstaja, to si zapomnim
if(st1>=n1max)
{
//izpis v labelo
}
}
text_datin.Close();
}
- spremenilo: iceurb ()
darkolord ::
objekt pol1[st1] moraš inicializirat, preden ga lahko uporabljaš...
Poleg tega bereš samo vsako drugo vrstico - prvo prebereš, ko preverjaš pogoj, drugo pa v notranjosti.
Pa še array "podatki" ima v tvojem primeru 2 elementa, iz fajla pa želiš prebrati 3...
Poleg tega bereš samo vsako drugo vrstico - prvo prebereš, ko preverjaš pogoj, drugo pa v notranjosti.
Pa še array "podatki" ima v tvojem primeru 2 elementa, iz fajla pa želiš prebrati 3...
while ((st = text_datin.ReadLine()) != null && (st1 < n1max)) { pol1[st1] = new sadje(); pol1[st1].stevilo = Int32.Parse(st); st1++; }
Zgodovina sprememb…
- spremenilo: darkolord ()
iceurb ::
čitam samo 2 elementa če jih je več javim uporabniku da jih je več ampak sem shranil samo 2 podatka. Sem naredil kot si mi ti predlagal ampak spet javi napako: FormatException was unhandled... Input string was not in a correct format.
pol1[st1] = new sadje();
pol1[st1].ime = text_datin.ReadLine();// ime prečitam v polje
st = text_datin.ReadLine();//stevilo elementov prečitanm v polje
pol1[st1].stevilo = Int32.Parse(st);
st1++;
podatka pa zgledata tako:
banana
18
jabolka
12
pol1[st1] = new sadje();
pol1[st1].ime = text_datin.ReadLine();// ime prečitam v polje
st = text_datin.ReadLine();//stevilo elementov prečitanm v polje
pol1[st1].stevilo = Int32.Parse(st);
st1++;
podatka pa zgledata tako:
banana
18
jabolka
12
darkolord ::
Ja, ker hočeš "jabolka" pretvorit v število . Prvo branje narediš že v pogoju while zanke.
while ((st = text_datin.ReadLine()) != null && (st1 < n1max))//prečitaj vse podatke iz datoteke { // razen, če jih je preveč pol1[st1] = new sadje(); pol1[st1].ime = st;// ime prečitam v polje st = text_datin.ReadLine();//stevilo elementov prečitanm v polje pol1[st1].stevilo = Int32.Parse(st); st1++; }
iceurb ::
jao sem čist spregledo to :S sem površen. Hvala zdaj mi to deluje, če bo še kakšno vprašanje še vprašam
LP
LP
iceurb ::
Evo še eno začetniško vprašanje mam in sicer ali obstaja kakšen način, da ko kliknem nek gumb in delam z podatki(iskanje,sortiranje, ...), da mi ni treba vedno zvnova klicati tega podprograma za čitanje iz datoteke ampak uporabim podatke ki sem jih čital v polje ko se je program zagnal?
darkolord ::
Seveda, samo spodnjo vrstico premakni iz konstruktorja (tako da bo direkt v classu), potem pa imaš vse podatke v "podatki":
sadje[] podatki= new sadje[2];
sadje[] podatki= new sadje[2];
iceurb ::
class sadje
{
public string ime; //ime nečesa
public int stevilo; // stevilo elementov, katerih ime je opisano v prejšnji vrstici
public sadje[] podatki = new sadje[2];
};
tako? kak pa kličem podprogram da uporabim "podatki"?
{
public string ime; //ime nečesa
public int stevilo; // stevilo elementov, katerih ime je opisano v prejšnji vrstici
public sadje[] podatki = new sadje[2];
};
tako? kak pa kličem podprogram da uporabim "podatki"?
iceurb ::
spet imam probleme in sicer mam rezerviranih 30 polij tipa kino. problem nastane tukaj:
stevilo++;
podatki[stevilo] = vpis;
stevilo ima vrednost 2 in se poveča na 3 sigurno pa ni več kot 30 da bi zaradi tega javljalo napako
ko poskušam podatke iz podatki[stevilo] spraviti v labelo(kot da so vrednosti null)
hvala za pomoč
stevilo++;
podatki[stevilo] = vpis;
stevilo ima vrednost 2 in se poveča na 3 sigurno pa ni več kot 30 da bi zaradi tega javljalo napako
ko poskušam podatke iz podatki[stevilo] spraviti v labelo(kot da so vrednosti null)
hvala za pomoč
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [C#] Domača naloga za faksOddelek: Programiranje | 2093 (1717) | Spura |
» | Sode ter Lihe(C Sharp)Oddelek: Programiranje | 1664 (1462) | detroit |
⊘ | [C#]naloga iz metod!Oddelek: Programiranje | 1662 (1495) | Ziga Dolhar |
» | Naloga v C#Oddelek: Programiranje | 2610 (2110) | Hardstyle |
» | [C#] MnozenjeOddelek: Programiranje | 1542 (1384) | noraguta |