» »

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();

}
  • 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...

            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

darkolord ::

Ja, ker hočeš "jabolka" pretvorit v število :D. 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

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];

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"?

darkolord ::

Ne v sadju, samo v classu Form1 naj bo

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č


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[C#] Domača naloga za faks

Oddelek: Programiranje
172093 (1717) Spura
»

Sode ter Lihe(C Sharp)

Oddelek: Programiranje
161664 (1462) detroit

[C#]naloga iz metod!

Oddelek: Programiranje
81662 (1495) Ziga Dolhar
»

Naloga v C#

Oddelek: Programiranje
72610 (2110) Hardstyle
»

[C#] Mnozenje

Oddelek: Programiranje
61542 (1384) noraguta

Več podobnih tem