Forum » Programiranje » [C#] branje ter urejanje podatkov
[C#] branje ter urejanje podatkov
maticm ::
V C# bi rad napisal program, ki bi prebral podatke iz nekega txt filea nato pa bi te podatke uporabil naprej.
Recimo: tole je moja txt datoteka!
8300 in 8304 sta registra
8300 je pisalni oz to je naslov
8304 pa vrne naslov naprave če je prisotna, če ni pa je ffffff
_DATA p:e0008300
00 00 00 80
_END 0
_DATA p:e0008304
57 19 90 00
_END 0
_DATA p:e0008300
00 58 00 80
_END 0
_DATA p:e0008304
ff ff ff ff
_END 0
Recimo: tole je moja txt datoteka!
8300 in 8304 sta registra
8300 je pisalni oz to je naslov
8304 pa vrne naslov naprave če je prisotna, če ni pa je ffffff
_DATA p:e0008300
00 00 00 80
_END 0
_DATA p:e0008304
57 19 90 00
_END 0
_DATA p:e0008300
00 58 00 80
_END 0
_DATA p:e0008304
ff ff ff ff
_END 0
- spremenilo: snow ()
maticm ::
Na kratko:
Rad bi:
-00000080 - mi pove številko naprave (mal pomešani biti) in moram izpisati
-57 19 90 00 - tole cifro pa moram izpisat
Vse dobim v txt fileu.
Če pa je cifra ff ff ff ff za številko naprave pa naj ne izpiše ničesar
Kako naj definiram ff ff ff ff v C# kot spremenljivko??
Rad bi:
-00000080 - mi pove številko naprave (mal pomešani biti) in moram izpisati
-57 19 90 00 - tole cifro pa moram izpisat
Vse dobim v txt fileu.
Če pa je cifra ff ff ff ff za številko naprave pa naj ne izpiše ničesar
Kako naj definiram ff ff ff ff v C# kot spremenljivko??
Zgodovina sprememb…
- spremenil: maticm ()
salesky ::
Ja lahko jo definiraš kot string?
Drugače pa napišeš program, kjer odpreš file in greš skoz celotno datoteko in poiščeš za vsako vrstico vrednost ki jo iščeš.
LP
Drugače pa napišeš program, kjer odpreš file in greš skoz celotno datoteko in poiščeš za vsako vrstico vrednost ki jo iščeš.
LP
maticm ::
Kaj delam narobe, da mi vedno izpiše samo prvo napravo?
aja vrstic je 178
evo moj file:
_DATA p:e0008300
00 00 00 80
_DATA p:e0008304
57 19 90 00
_END 0
_DATA p:e0008300
00 58 00 80
_DATA p:e0008304
ff ff ff ff
_END 0
_DATA p:e0008300
00 60 00 80
_DATA p:e0008304
ff ff ff ff
_END 0
_DATA p:e0008300
00 68 00 80
_DATA p:e0008304
33 56 55 88
_END 0
.
.
.
in koda:
static void Main(string[] args)
{
//Load our text file
TextReader tr = new StreamReader("d:\\savefile.txt");
//How many lines should be loaded?
int NumberOfLines = 180;
//Make our array for each line - polje veliko za vsako vrstico
string[] ListLines = new string[NumberOfLines];
//Read the number of lines and put them in the array
for (int i = 1; i < NumberOfLines; i++)
{
ListLines[i] = tr.ReadLine();
}
//definicija spremenljivke ni= ff ff ff ff
string ni = " ff ff ff ff";
int x=5;
int y=3;
start:
if (ListLines[x]== ni)
{
x++;
x++;
x++;
x++;
x++;
x++;
y++;
y++;
y++;
y++;
y++;
y++;
}
else
{
Console.WriteLine(ListLines[y]);
x++;
x++;
x++;
x++;
x++;
x++;
y++;
y++;
y++;
y++;
y++;
y++;
}
Console.ReadLine();
// close the stream
tr.Close();
goto start;
}
private void Form1_Load(object sender, System.EventArgs e)
{
}
}
}
aja vrstic je 178
evo moj file:
_DATA p:e0008300
00 00 00 80
_DATA p:e0008304
57 19 90 00
_END 0
_DATA p:e0008300
00 58 00 80
_DATA p:e0008304
ff ff ff ff
_END 0
_DATA p:e0008300
00 60 00 80
_DATA p:e0008304
ff ff ff ff
_END 0
_DATA p:e0008300
00 68 00 80
_DATA p:e0008304
33 56 55 88
_END 0
.
.
.
in koda:
static void Main(string[] args)
{
//Load our text file
TextReader tr = new StreamReader("d:\\savefile.txt");
//How many lines should be loaded?
int NumberOfLines = 180;
//Make our array for each line - polje veliko za vsako vrstico
string[] ListLines = new string[NumberOfLines];
//Read the number of lines and put them in the array
for (int i = 1; i < NumberOfLines; i++)
{
ListLines[i] = tr.ReadLine();
}
//definicija spremenljivke ni= ff ff ff ff
string ni = " ff ff ff ff";
int x=5;
int y=3;
start:
if (ListLines[x]== ni)
{
x++;
x++;
x++;
x++;
x++;
x++;
y++;
y++;
y++;
y++;
y++;
y++;
}
else
{
Console.WriteLine(ListLines[y]);
x++;
x++;
x++;
x++;
x++;
x++;
y++;
y++;
y++;
y++;
y++;
y++;
}
Console.ReadLine();
// close the stream
tr.Close();
goto start;
}
private void Form1_Load(object sender, System.EventArgs e)
{
}
}
}
PaX_MaN ::
Nekej v tem stillu:
1. če se vrstica konča s e0008300, izpiši naslednjo vrstico, nato preskoči 1 vrstico in izpiši naslednjo vrstico, pojdi na naslednjo vrstico,
2. če se ne konča s e0008300, pojdi v naslednjo vrstico
Je to to?
1. če se vrstica konča s e0008300, izpiši naslednjo vrstico, nato preskoči 1 vrstico in izpiši naslednjo vrstico, pojdi na naslednjo vrstico,
2. če se ne konča s e0008300, pojdi v naslednjo vrstico
Je to to?
Zgodovina sprememb…
- spremenilo: PaX_MaN ()
maticm ::
Če je vrstica ff ff ff ne izpiše ničesar, če pa je namesto ff karkoli druzga pa ispiše dve vrstici nad tem drugim (ki naj bi pisalo namesto ff ff ff ff)
recimo:
v prvem podatku je namesto ff ff ff ff : 57 19 90 00
izpisat moram pa 00 00 00 80
_DATA p:e0008300
00 00 00 80
_DATA p:e0008304
57 19 90 00
_END 0
_DATA p:e0008300
00 58 00 80
_DATA p:e0008304
ff ff ff ff
_END 0
_DATA p:e0008300
00 60 00 80
_DATA p:e0008304
ff ff ff ff
_END 0
_DATA p:e0008300
00 68 00 80
_DATA p:e0008304
33 56 55 88
_END 0
recimo:
v prvem podatku je namesto ff ff ff ff : 57 19 90 00
izpisat moram pa 00 00 00 80
_DATA p:e0008300
00 00 00 80
_DATA p:e0008304
57 19 90 00
_END 0
_DATA p:e0008300
00 58 00 80
_DATA p:e0008304
ff ff ff ff
_END 0
_DATA p:e0008300
00 60 00 80
_DATA p:e0008304
ff ff ff ff
_END 0
_DATA p:e0008300
00 68 00 80
_DATA p:e0008304
33 56 55 88
_END 0
Zgodovina sprememb…
- spremenil: maticm ()
PaX_MaN ::
Jah, lahko bi dal nekej tacga:
- prebereš vse vrstice v seznam
- greš skozi vsako 4. vrstico ( 4 * i, i -> n) v seznamu, dokler nisi na koncu seznama
- jo preveriš, če je enaka "ff ff ff ff":
- če je, greš na naslednjo 4. vrstico ( 4 * (i +1))
- sicer izpišeš (4 * i -2) vrstico
- prebereš vse vrstice v seznam
- greš skozi vsako 4. vrstico ( 4 * i, i -> n) v seznamu, dokler nisi na koncu seznama
- jo preveriš, če je enaka "ff ff ff ff":
- če je, greš na naslednjo 4. vrstico ( 4 * (i +1))
- sicer izpišeš (4 * i -2) vrstico
Zgodovina sprememb…
- spremenilo: PaX_MaN ()
maticm ::
še nekaj sem ugotovil!
Kaj če jaz spremenim file po tem ko skompajlam. Ali se bodo spremembe upštevale v samem postopku ali ne?
Jaz želim, da se!
Kaj če jaz spremenim file po tem ko skompajlam. Ali se bodo spremembe upštevale v samem postopku ali ne?
Jaz želim, da se!
PaX_MaN ::
Če se datoteka s podatki spremeni, jo boš moral še enkrat prebrati in sparsat.
Namreč, ko je datoteka v uporabi ( tukaj z NekimStreamReaderjem), naredi lock na to datoteko, zato jo ne moreš spreminjati, dokler ne zapreš streama ( tu tr.close()).
Lahko narediš eno metodo, ki ti periodično parsa ta fajl, pač glede na npr. velikost, datum zadnje spremembe datoteke.
Namreč, ko je datoteka v uporabi ( tukaj z NekimStreamReaderjem), naredi lock na to datoteko, zato jo ne moreš spreminjati, dokler ne zapreš streama ( tu tr.close()).
Lahko narediš eno metodo, ki ti periodično parsa ta fajl, pač glede na npr. velikost, datum zadnje spremembe datoteke.
maticm ::
kako naj pa odrežem podatek:
00 58 00 80
rabil bi samo 58 in pretvoril v decimalno tako da bi dobil 11.
5 8
|0101|1000
če pogledaš samo prvih 5 bitov (L->D) je to cifra 11 v decimalni
Lahko kdo pripne kakšen link (na PM) za kakšen dober book.
00 58 00 80
rabil bi samo 58 in pretvoril v decimalno tako da bi dobil 11.
5 8
|0101|1000
če pogledaš samo prvih 5 bitov (L->D) je to cifra 11 v decimalni
Lahko kdo pripne kakšen link (na PM) za kakšen dober book.
Zgodovina sprememb…
- spremenil: maticm ()
PaX_MaN ::
Zihr maš nekje razred/struct/library za manipulacijo s stringi.
Vzameš obe cifri posebej, ie (string zato, da lahko potem pretvoriš v binarno in vzameš črke vuni):
String sub = "00 58 00 80".characterAt(3);
String sub1 = "00 58 00 80".characterAt(4);
Potem imaš pa tudi nekje funkcijo toBinary(), če nadaljuješ, pretvoriš prvega in drugega v binarno:
sub = sub.toBinary().toString();
sub1 = sub1.toBinary().toString();
Nato pa od drugega samo vzameš prvo črko (1 ali 0) in jo dodaš prvi:
sub = sub + sub1.characterAt(0);
Potem pa samo še pretvoriš nazaj v desetiško:
String final = sub.binaryToDecimal();
Tole je malo sfaljeno, ker ne poznam funkcij iz C#. Malo poguglaj ali pa RTMjaj.
Vzameš obe cifri posebej, ie (string zato, da lahko potem pretvoriš v binarno in vzameš črke vuni):
String sub = "00 58 00 80".characterAt(3);
String sub1 = "00 58 00 80".characterAt(4);
Potem imaš pa tudi nekje funkcijo toBinary(), če nadaljuješ, pretvoriš prvega in drugega v binarno:
sub = sub.toBinary().toString();
sub1 = sub1.toBinary().toString();
Nato pa od drugega samo vzameš prvo črko (1 ali 0) in jo dodaš prvi:
sub = sub + sub1.characterAt(0);
Potem pa samo še pretvoriš nazaj v desetiško:
String final = sub.binaryToDecimal();
Tole je malo sfaljeno, ker ne poznam funkcij iz C#. Malo poguglaj ali pa RTMjaj.
maticm ::
lih kar bom pop****
Dam
char k = number [4];
char l = number [5];
dobim znaka od stringa v k in l
zdej pa skonvertirat v bin? Kaj delam narobe?
int value = Convert.ToInt32("k",10);
Console.WriteLine(value);
string bin = Convert.ToString(value,2);
Console.WriteLine(bin);
Dam
char k = number [4];
char l = number [5];
dobim znaka od stringa v k in l
zdej pa skonvertirat v bin? Kaj delam narobe?
int value = Convert.ToInt32("k",10);
Console.WriteLine(value);
string bin = Convert.ToString(value,2);
Console.WriteLine(bin);
maticm ::
če pa napišem tole:
int value = Convert.ToInt32(k);
Console.WriteLine(value);
string bin = Convert.ToString(value, 2);
Console.WriteLine(bin);
mi vrže ven decimalno kodo od znaka 0 torej 48.
Se pravi bi mogu najprej skonvertirat v decimalno cifro in nato uporabit tole - se motim?
int value = Convert.ToInt32(k);
Console.WriteLine(value);
string bin = Convert.ToString(value, 2);
Console.WriteLine(bin);
mi vrže ven decimalno kodo od znaka 0 torej 48.
Se pravi bi mogu najprej skonvertirat v decimalno cifro in nato uporabit tole - se motim?
maticm ::
Sicer mi stvar dela ampak mi ni jasno od kod dobi še dva bita zadaj? skonvertiral je 00 in d8
0
0
110100 (dva bita)
1000
program:
int value = Convert.ToInt16(k); // konvertiramo v intiger
//Console.WriteLine(value);
int decimalna = value - 48; //odštejemo 48 (od ascii kode za 0), da dobimo dejansko decimalno vrednost, ki jo želimo pretvoriti
string bin = Convert.ToString(decimalna, 2); //konvertiramo v binarno vrednost
Console.WriteLine(bin);
0
0
110100 (dva bita)
1000
program:
int value = Convert.ToInt16(k); // konvertiramo v intiger
//Console.WriteLine(value);
int decimalna = value - 48; //odštejemo 48 (od ascii kode za 0), da dobimo dejansko decimalno vrednost, ki jo želimo pretvoriti
string bin = Convert.ToString(decimalna, 2); //konvertiramo v binarno vrednost
Console.WriteLine(bin);
maticm ::
Kako naj zahtevam da bo pretvorjena BINARNA vrednost vedno 4 bitna?
Recimo, da pretvorim:
6 => 0110
8=> 1000
string binl = Convert.ToString(kodal, 2);
funkcija vrača 6=>110
Recimo, da pretvorim:
6 => 0110
8=> 1000
string binl = Convert.ToString(kodal, 2);
funkcija vrača 6=>110
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | C# pomočOddelek: Programiranje | 1295 (937) | mihies |
» | [c#] Majhen problemčekOddelek: Programiranje | 1014 (822) | darkolord |
» | [C#] Operacija IN in ALI med dvema int številomaOddelek: Programiranje | 1182 (995) | LeQuack |
» | C# (strani: 1 2 )Oddelek: Programiranje | 12102 (8937) | Ericssony |
» | Pomoč pri programčkihOddelek: Programiranje | 2947 (2597) | Mitja Bonča |