Forum » Programiranje » VC# Zapis podatkov na disk
VC# Zapis podatkov na disk
matej_jack ::
Zanima me, kateri je najlažji način za zapis in čitanje podatkov iz diska. Uporabim tekstovno datoteko? Binarno? Obstaja kakšna preprosta struktura, podobna tabeli, v katero bi potem prenesel te podatke in jih izpisal?
Prosim tudi za podkrepitev rešitve s kodo :D
Prosim tudi za podkrepitev rešitve s kodo :D
Ankhesenamun ::
Tko se bere tekstovno datoteko po vrsticah, sam primerček...
Js ne vem kakšno strukturo maš, boš mogu bit bol natančen. Mau poglej kako lahko bereš preko stream readerja. Seveda lahko bereš tudi brez njega...
FileStream fs = new FileStream("pot do datoteke", FileMode.Open, FileAccess.Read); StreamReader sr = new StreamReader(fs); string vrstica_iz_datoteke = sr.ReadLine(); sr.Close(); fs.Close();
Js ne vem kakšno strukturo maš, boš mogu bit bol natančen. Mau poglej kako lahko bereš preko stream readerja. Seveda lahko bereš tudi brez njega...
matej_jack ::
Gre za podatke o določeni osebi (nova podatkovna struktura - oseba), ki vsebuje ime, število objav, število strani, in število točk. Osebe sodelujejo na konferencah, in so razvrščene v laboratorije, se pravi še imam podatek ime konference in ime laboratorija.
Načrt:
Konferenca
.Laboratorij
..Član
...Ime
...Število objav
...Ime [x] objave
...Število točk [x] objave
...Število strani [x] objave
edit:
Ankhesenamun, s tem sem se nekaj igral. Problem nastane, kako vedeti, kaj pomeni katera vrstica. Bi bilo možno, da bi vrstica v datoteki zgledala nekako tako:
in bi potem program prebral samo Janez in vnesel tega janeza v spremenljivko?
Načrt:
Konferenca
.Laboratorij
..Član
...Ime
...Število objav
...Ime [x] objave
...Število točk [x] objave
...Število strani [x] objave
edit:
Ankhesenamun, s tem sem se nekaj igral. Problem nastane, kako vedeti, kaj pomeni katera vrstica. Bi bilo možno, da bi vrstica v datoteki zgledala nekako tako:
imeosebe: Janez
in bi potem program prebral samo Janez in vnesel tega janeza v spremenljivko?
Zgodovina sprememb…
- spremenil: matej_jack ()
Cr00k ::
zakaj pa hočeš to v textovni datoteki imet?
Na tvojem mestu bi jaz vse skup zapakiru v bazo (Access, SQL2005,..) oz. eventuelno v XML...
S tem načinom bi imel večji pregled in nadzor nad zapisi, spremembami in tudi lažje poizvedbe po določenih osebah npr. po Janezih...
Lp, Rok
Na tvojem mestu bi jaz vse skup zapakiru v bazo (Access, SQL2005,..) oz. eventuelno v XML...
S tem načinom bi imel večji pregled in nadzor nad zapisi, spremembami in tudi lažje poizvedbe po določenih osebah npr. po Janezih...
Lp, Rok
matej_jack ::
Torej, kako naredim XML bazo? Tega nisem še nikoli delal
Kako potem vstavljam, urejam, brišem, čitam iz te baze?
Kako potem vstavljam, urejam, brišem, čitam iz te baze?
Tutankhamun ::
To kar ti je Ankesenamun dala je Serializacija objekta v XML format. To pa res ni zakompliciran no. Probi narest step by step boš vidu kako enostavno je. Al pa u google vpiš c# serialize objects.
AMD Phenom QUAD 9950 Black Edition, 8GB
matej_jack ::
3x sem probal :S Nevem tega res, kar neke napake
Uporabljam MS Visual C# 2008 Express verzijo. Polek tega bi jaz to rabil za GUI, ne za konzolo
The type or namespace name 'XmlTextWriter' could not be found (are you missing a using directive or an assembly reference?)
Uporabljam MS Visual C# 2008 Express verzijo. Polek tega bi jaz to rabil za GUI, ne za konzolo
matej_jack ::
Uspelo mi je, s pomočjo te strani
Hvala vam
Naslednja stvar, ki me zanima je, kako se uporabljajo vrinjene strukture (class). Narejeni imam dve strukturi, oseba in objava. Objava bi bila vrinjena v osebo, ker lahko ima pač ena oseba več objav. (like: oseba[x].objava[y].ime)
Hvala vam
Naslednja stvar, ki me zanima je, kako se uporabljajo vrinjene strukture (class). Narejeni imam dve strukturi, oseba in objava. Objava bi bila vrinjena v osebo, ker lahko ima pač ena oseba več objav. (like: oseba[x].objava[y].ime)
Zgodovina sprememb…
- spremenil: matej_jack ()
matej_jack ::
Kako pa potem kličem objava[x].ime?
Sedaj imam tako:
Sedaj imam tako:
public class oseba
{
private short objav;
private string ime;
List< objava > Objave;
public oseba()
{
}
//Get+set za objav in ime
}
public class objava
{
private string ime;
private short strani;
private short tock;
private short kategorija;
public objava()
{
}
//get+set
}
Zgodovina sprememb…
- spremenil: matej_jack ()
darkolord ::
oseba lojze = new oseba(); lojze.objave = new List<objava>(); // tole bi lahko dal tudi ze v osebo objava objava1 = new objava(); lojze.objave.Add(objava); lojze.objave[0].ime = "Ciciban";
matej_jack ::
OK hvala, tole zdaj dela :D
Kako bi zdaj te podatke prikazal na zaslon? Obstaja kakšna simple tabela, da bi noter vstavil podatke, ampak samo za objavo (naslov, stevilo tock, kategorija,...)?
Aja pa še to, kako rezerviram več oseb(lojzetov) v katerih bo več objav?
oseba[] lojze = new oseba[5];
lojze[i].Objave = new List< objava>(); ??
Kako bi zdaj te podatke prikazal na zaslon? Obstaja kakšna simple tabela, da bi noter vstavil podatke, ampak samo za objavo (naslov, stevilo tock, kategorija,...)?
Aja pa še to, kako rezerviram več oseb(lojzetov) v katerih bo več objav?
oseba[] lojze = new oseba[5];
lojze[i].Objave = new List< objava>(); ??
Zgodovina sprememb…
- spremenil: matej_jack ()
darkolord ::
> Aja pa še to, kako rezerviram več oseb(lojzetov) v katerih bo več objav?
Enako nardiš
> Kako bi zdaj te podatke prikazal na zaslon?
Kakšen DataGridView recimo
Enako nardiš
List<oseba>
> Kako bi zdaj te podatke prikazal na zaslon?
Kakšen DataGridView recimo
matej_jack ::
Joj meni ni nič jasno več tu
List< oseba> lojze = new List< oseba>();
lojze[0].Objave = new List< objava>(); // Napaka: index was out of range!
objava objava1 = new objava();
lojze[0].Objave.Add(objava1); //Spet isto: index was out of range....
lojze[0].Objave[0].ime = "Ciciban"; //in še enkrat, index out of range
Kje je napaka?
In kako se uporablja DataGridView? En simple primerček vnosa bi rabil
List< oseba> lojze = new List< oseba>();
lojze[0].Objave = new List< objava>(); // Napaka: index was out of range!
objava objava1 = new objava();
lojze[0].Objave.Add(objava1); //Spet isto: index was out of range....
lojze[0].Objave[0].ime = "Ciciban"; //in še enkrat, index out of range
Kje je napaka?
In kako se uporablja DataGridView? En simple primerček vnosa bi rabil
Zgodovina sprememb…
- spremenil: matej_jack ()
darkolord ::
public class oseba { private string ime; List<objava> Objave = new List<objava>(); public oseba() { } } public class objava { private string ime; private short strani; private short tock; private short kategorija; public objava() { } } List<oseba> osebe = new List<oseba>(); oseba oseba1 = new oseba(); oseba1.Ime = "Lojze"; objava objava1 = new objava(); objava1.Ime = "Ciciban" oseba1.Objave.Add(objava1); osebe.Add(oseba1);
Zgodovina sprememb…
- spremenilo: darkolord ()
matej_jack ::
Hvala, zdaj razumem!
Kako te podatke spravim v datagrid? Noter bi pa dal samo podatke o objavi (4 stolpce rabim-vsaka objava svoja vrstica)?
Kako te podatke spravim v datagrid? Noter bi pa dal samo podatke o objavi (4 stolpce rabim-vsaka objava svoja vrstica)?
matej_jack ::
Kako pa dalje izpišem podatke?
ker tole ne naredi nič
ker tole ne naredi nič
Zgodovina sprememb…
- spremenil: matej_jack ()
Kekec ::
Najboljs da poves kaj zelis pa ti mi napisemo :) al pa se potrudis pa pogledas vsaj malo v help pa boš videl kako se uporablja datagrid, btw micorsoft ima cel MSDN (help) na netu.
matej_jack ::
Ok, to mi je sedaj nekako uspelo!
Sedaj me zanima, kako lahko prenašam podatke med podprogrami oz. eventi?
Imam pa globalno rezervirano strukturico z dvema lastnostima, to strukturo pa kasnjeje uporabljeno kot Array<struktura>.
V enem eventu jo napolnim, kako potem preverjam te napolnjene podatke?
Ker če globalno rezerviram Array<struktura> strukt1 = new lalala, in kasnjeje kličem z strukt1[0].lastnost mi javi napako da index ne ustreza. Če pa lokalno rezerviram struktura strukt2 = new struktura(), napolnim podatke in dodam v strukt1, pa ne morem do podatkov dostopat v drugem eventu.
Upam, da me razumete =)
Prosim za pomoč :P
lp, m
Sedaj me zanima, kako lahko prenašam podatke med podprogrami oz. eventi?
Imam pa globalno rezervirano strukturico z dvema lastnostima, to strukturo pa kasnjeje uporabljeno kot Array<struktura>.
V enem eventu jo napolnim, kako potem preverjam te napolnjene podatke?
Ker če globalno rezerviram Array<struktura> strukt1 = new lalala, in kasnjeje kličem z strukt1[0].lastnost mi javi napako da index ne ustreza. Če pa lokalno rezerviram struktura strukt2 = new struktura(), napolnim podatke in dodam v strukt1, pa ne morem do podatkov dostopat v drugem eventu.
Upam, da me razumete =)
Prosim za pomoč :P
lp, m
matej_jack ::
A je možno iz datagridview pretvoriti prenesti v objekt?
edit: že našel :)
edit: že našel :)
Zgodovina sprememb…
- spremenil: matej_jack ()
matej_jack ::
Ok še en problem :D
//Akcija za odpiranje datoteke..............................
private void odpri_FileOk(object sender, CancelEventArgs e)
{
//Izbrana datoteka in OK
lokdat.Text = odpri.FileName; //Vrstica stanja
//AKCIJA!!!!!!
FileStream fs = new FileStream(odpri.FileName, FileMode.Open);
XmlSerializer xs = new XmlSerializer(typeof(podatki));
podatki podatek = (podatki)xs.Deserialize(fs);
short st_k;
for (st_k = 0; st_k < podatek.konference.Count; st_k++)
{
izbkonf.Items.Add(podatek.konference[st_k].ime); //v combo box doda imena konferenc
}
}
private void izbkonf_SelectedIndexChanged(object sender, EventArgs e)
{
//KONFERENCA IZBRANA!
podatki podatek = new podatki();
int i = izbkonf.SelectedIndex;
//TUKAJ PRIDE DO NAPAKE, KER NE NAJDE podatek.konference[i], INDEX ERROR.
//Zanima me, kako dostopam do teh pdoatkov, ki sem jih pridobil zgoraj in shranil v podatek.konference[]?
if (podatek.konference[i].l1 == true)
izblab.Items.Add(podatek.l1n);
if (podatek.konference[i].l2 == true)
izblab.Items.Add(podatek.l2n);
if (podatek.konference[i].l3 == true)
izblab.Items.Add(podatek.l3n);
if (podatek.konference[i].l4 == true)
izblab.Items.Add(podatek.l4n);
if (podatek.konference[i].l5 == true)
izblab.Items.Add(podatek.l5n);
}
//Akcija za odpiranje datoteke..............................
private void odpri_FileOk(object sender, CancelEventArgs e)
{
//Izbrana datoteka in OK
lokdat.Text = odpri.FileName; //Vrstica stanja
//AKCIJA!!!!!!
FileStream fs = new FileStream(odpri.FileName, FileMode.Open);
XmlSerializer xs = new XmlSerializer(typeof(podatki));
podatki podatek = (podatki)xs.Deserialize(fs);
short st_k;
for (st_k = 0; st_k < podatek.konference.Count; st_k++)
{
izbkonf.Items.Add(podatek.konference[st_k].ime); //v combo box doda imena konferenc
}
}
private void izbkonf_SelectedIndexChanged(object sender, EventArgs e)
{
//KONFERENCA IZBRANA!
podatki podatek = new podatki();
int i = izbkonf.SelectedIndex;
//TUKAJ PRIDE DO NAPAKE, KER NE NAJDE podatek.konference[i], INDEX ERROR.
//Zanima me, kako dostopam do teh pdoatkov, ki sem jih pridobil zgoraj in shranil v podatek.konference[]?
if (podatek.konference[i].l1 == true)
izblab.Items.Add(podatek.l1n);
if (podatek.konference[i].l2 == true)
izblab.Items.Add(podatek.l2n);
if (podatek.konference[i].l3 == true)
izblab.Items.Add(podatek.l3n);
if (podatek.konference[i].l4 == true)
izblab.Items.Add(podatek.l4n);
if (podatek.konference[i].l5 == true)
izblab.Items.Add(podatek.l5n);
}
Zgodovina sprememb…
- spremenil: matej_jack ()
matej_jack ::
OK.
To definiram v classu podatki?
public class podatki
{
public List<konferenca> konference = new List<konferenca>();
public string l1n;
public string l2n;
public string l3n;
public string l4n;
public string l5n;
public podatki()
{
}
podatki podatek = new podatki();
}
Kako pa potem dostopam do "podatek"-a?
To definiram v classu podatki?
public class podatki
{
public List<konferenca> konference = new List<konferenca>();
public string l1n;
public string l2n;
public string l3n;
public string l4n;
public string l5n;
public podatki()
{
}
podatki podatek = new podatki();
}
Kako pa potem dostopam do "podatek"-a?
matej_jack ::
Nova naloga, ki je ne znam rešiti :)
In siceer, moram izpisat začetno pomnilniško lokacijo nekega elementa in pa velikost strukture.
V C++ se je to delalo z sizeof(struktura), tu pa kot vidim ni tako enostavno.
V čem je trik?
hvala že vnaprej ;)
In siceer, moram izpisat začetno pomnilniško lokacijo nekega elementa in pa velikost strukture.
V C++ se je to delalo z sizeof(struktura), tu pa kot vidim ni tako enostavno.
V čem je trik?
hvala že vnaprej ;)
matej_jack ::
Ne gre uporabit sizeof(struktura)
Če uporabim unsafe pa mi javi napako:
Error 1 Only assignment, call, increment, decrement, and new object expressions can be used as a statement
Pa kako naj izpišem pomnilniško lokacijo??
Če uporabim unsafe pa mi javi napako:
Error 1 Only assignment, call, increment, decrement, and new object expressions can be used as a statement
Pa kako naj izpišem pomnilniško lokacijo??
Zgodovina sprememb…
- spremenil: matej_jack ()
matej_jack ::
Uspelo mi je, sem našel vse :)
Hvala še enkrat za vse, tema lahko gre v zaklep (če to prakticirate na tem forumu), drugače naj ostane
Hvala za pomoč
LP, matej
Hvala še enkrat za vse, tema lahko gre v zaklep (če to prakticirate na tem forumu), drugače naj ostane
Hvala za pomoč
LP, matej
Zgodovina sprememb…
- spremenil: matej_jack ()
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | metoda #get, #set ---> c#Oddelek: Programiranje | 1265 (1149) | fokz8 |
» | [C#] Delo z okni - urejanje osebeOddelek: Programiranje | 995 (867) | darkolord |
» | [C#] DeserializacijaOddelek: Programiranje | 1875 (1478) | Cvenemir |
» | Preusmeritev v C# formiOddelek: Programiranje | 1243 (1147) | OmegaM |
» | C#, Dodajanje podatkov v Arraylist z GumbomOddelek: Programiranje | 2292 (2131) | Beezgetz |