Diskuze: Vyhledáváni a přeskakování v texťáku
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 5 zpráv z 5.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.
Na takovouto práci s textem obecně doporučuju použít regulární výraz. Ten ti to už přímo rozdělí na podčásti (můžeš si to rovnou naparsovat). Přičemž není problém načítat po částech z hlediska paměťových nároků.
Pokud si chceš užít to vyhledávání více do hloubky, tak se mrkni na algoritmy vyhledávání v textu. Potřebuješ-li přímo na shodu, tak třeba Rabin-Karp (https://en.wikipedia.org/…rp_algorithm) nebo Aho-Corrasick (https://en.wikipedia.org/…ck_algorithm). Pokud ti nestačí hledat shodu, tak spíš zavítat do říše (konečných) automatů, což ale v podstatě vede na studium toho, jak se regexpy implementují (minimálně teoreticky).
Pokud si vyhledávání užít nechces, ale chtěl bys už mít výsledky, tak se zařiď podle Davida Nováka. 1500 stránek mi nepřijde jako moc co se týče paměťové náročnosti. Pár mega to asi bude, ale to obvykle netřeba řešit.
Díky, ale nevím moc dobře, jak to mám chápat...
Potřebuji vyhledat:
const string bazal = "TableAnimation::dealPlayerCards"; //první v textu
const string search0 = "MSG_0x0007-T"; // hned první za TableAnimation::dealPlayerCardsconst string a nacist par udaju zatím
const search1 = "MSG_0x0009-T"; // hned první za MSG_0x0007-T a nacíst pár udajů za tím
// poté hned přeskočit na další TableAnimation::dealPlayerCardsconst, ty dva údaje MSG za tím jsou nejdůležitější a mezi jednotlivými TableAnimation::dealPlayerCardsconst je mnoho MSG_0x0007-T a MSG_0x0009-T, ze kterých nic načítat necchci, jen z těch prvních dvou :-)
mám to!!!!!!!!!!
ted uz jen potřebuji, aby to otevřelo kopii toho textaku, protože se
průběžně doplnuje a já chci ty data ve streamu (živě)... a nejlíp aby si
to pamatovalo na jakym radku to skoncilo
tady si už ale vubec nevím rady
int i = 0;
while (!ps.eof()){
while(ps.good())
{
getline(ps, air);
if (air == bazal){
cout <<++i << ", Karty rozdany " << air << endl;
while (air != search0){
ps >> air;
while(air == search0){
ps >> card0 >> card0 >> card0 >> karta0 >> card0 >> karta1;
cout << i << ", MSG_0x0009-T nalezen" << ", holecards " << karta0 << karta1 << endl;
break;
}
}
while (air != search1){
ps >> air;
while(air == search1){
ps >> card1 >> card1 >> card1 >> card1 >> card1 >> card1 >> card1 >> card1 >> card1 >> stack >> bb;
cout << i << ", MSG_0x0007-T nalezen" << ", stack " << stack << ", bb " << bb << endl;
break;
}
}
/*
while (air != search1){
cout <<i << ", MSG_0x0007-T nalezen " << air << endl;
break;
}
}
*/
}
}
}
return 0;
}
Zobrazeno 5 zpráv z 5.