Ahoj,
mám problém s parserem, jde o vytáhnutí dat asi z 50k řádků za hodinu (log). Potřebuji to v live streamu, což už všechno mám mám už dokonce i analýzu, ale problém je, že mám vzorek 50k řádků a na něm je přesně 277 koček, mě se podařilo vytáhnout jen 263. Popíšu problém.
Dám příklad, jak data vypadají
kočka 22 -> data ktery chci vytahnout //to už mám všechno napsaný správně
pes 22 -> data
pes 22 -> data
pes 22 -> data
kočka 47 -> data
pes 47 -> data
pes 47 - > data
koček je přesnej počet 277 a ke každé kočce potřebuji přiřadit a předat třídě prvního psa pod stejným číslem.
kocka 22
pes 22
kocka 47
pes 47
Problém je, že někdy jsou data např. takhle
kocka 55
kocka 57
pes 57
pes 55
pes 55
pes 57
a takhle třeba náhodně
Ale vždy je pes po kočce.
A někdy výjimečně se stane, že chybí pes, takže kočka je, ale nemá se s čím sparovat. To ale nevadí.
Mám to pres FileStream, ale nechapu, že to nevrací x = název.position, nazev.seek (x, orig. begin) takové jaké předávám.
Mám dva parsery, první vytahuje kočky a psy z logfile a další ten, se kterým se teď trápím a který popisuji z nich dělá to co potřebuji...
NEVŠÍMEJTE SI VŮBEC TECH PARSOVACICH METOD (ty jsou všechny spávně) JEN PODMÍNEK A VRACENÍ POZICE
Takže potřebuji prostě, aby to vzalo všech 277 koček a k nim přiřadilo prvního psa se stejným číslem [:-)]
Někdy můžou být i např 3 kočky pod sebou :( Jsem z toho zoufalej...
FileStream fr1 = new FileStream("log.txt", FileMode.Open, FileAccess.ReadWrite);
StreamReader reader1 = new StreamReader(fr1);
string text1;
string[] textarr = { };
string[] textarr1 = { };
string[] textarr2 = { };
bool ToF = false;
while (reader1.EndOfStream == false)
{
if (ToF == true)
{
fr1.Seek(pos009, SeekOrigin.Begin);
ToF = false;
}
text1 = reader1.ReadLine();
if (text1.Contains("kocka"))
{
textarr = text1.Split(' ');
x++;
o++;
IDc[x] = textarr[4];
card1[x] = textarr[6];
card2[x] = textarr[8];
if ((textarr[6].EndsWith("s") == textarr[8].EndsWith("s")) && (textarr[6].EndsWith("d") == textarr[8].EndsWith("d"))
&& (textarr[6].EndsWith("h") == textarr[8].EndsWith("h")) && (textarr[6].EndsWith("c") == textarr[8].EndsWith("c")))
suited[x] = true;
else
suited[x] = false;
listBox2.Items.Add(x + "\t" + textarr[2] + "\t" + textarr[4] + "\t" + textarr[6] + " " + textarr[8] + "\t" + suited[x]);
text1 = reader1.ReadLine();
while (reader1.EndOfStream == false)
{
if (text1.Contains("pes") && text1.Contains(textarr[4]))
{
textarr1 = text1.Split(' ');
if (string.Equals(textarr1[9], "'W'"))
{
listBox2.Items.Add(x + "\t" + textarr1[2] + "\t" + textarr[4] + "\t" + "noaction");
stav[x] = 0;
IDs[x] = textarr1[4];
}
else if (text1.Contains("'*'"))
{
textarr1[16] = textarr1[16].Remove(textarr1[16].Length - 1);
textarr1[15] = textarr1[15].Remove(textarr1[15].Length - 1);
listBox2.Items.Add(x + "\t" + textarr1[2] + "\t" + textarr[4] + "\t" + textarr1[15] + ", " + textarr1[16]);
stav[x] = 1;
IDs[x] = textarr1[4];
stack[x] = int.Parse(textarr1[15]);
bb[x] = int.Parse(textarr1[16]);
}
else
{
listBox2.Items.Add(x + "\t" + textarr1[2] + "\t" + textarr[4] + "\t" + textarr1[10]);
stav[x] = 2;
tocall[x] = int.Parse(textarr1[10]);
bb[x] = bb[x - 1];
}
break;
}
else if (text1.Contains("kocka"))
{
pos009 = fr1.Position - text1.Length; //chyba 1. tuhletu pozici to nastavi nekam uplne do hoven asi o 15 radku pod onoho psa, od kteryho potebuji zacit nasledujíci cyklus
listBox2.Items.Add(pos009 + " " + text1);
text1 = reader1.ReadLine();
ToF = true;
}
else
{
text1 = reader1.ReadLine();
//tady potřebuji, aby to sem skočilo třeba když tam nebude žádnej pes, kterej by se mohl sparovat a přeskočilo ho to...
// program zastavi přidávání psů jakmile narazí na kocku, která nemá psa
//protože ho to hledá tak dlouho, dokud není na eof, což je samozřejmě špatně
}
}
m = 0;
}
}