Diskuze: Citanie v textovom subore od konca smerom na zaciatok
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.


Zobrazeno 19 zpráv z 19.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.


K čemu to potřebuješ ? Načti si do pole všechny řádky a pak je čti
obráceně 
Potrebujem to pretoze mam nejaky textovy subor do ktoreho zapisujem nejake logy a tento subor textovy ma niekedy aj 200 MB a nechcem cely nacitat ale len od konca mozno nejakych 30 riadkov sa vratit a najst si retazec textovy co potrebujem
Můžeš to číst řádek po řádku a přeskočit tak určitou část souboru a až zbytek si ukládat do nějakého pole, které potom otočíš. Pokud víš, že třeba potřebuješ 10% souboru od konce nebo přesně víš od jakého řádku to chceš, neměl by to být problém.
Jelikož nevíš kolik bajtů má jeden záznam, tak v souboru nemůžeš skákat. Každý řádek je zakončen speciální sekvencí znaků, což označuje jeho ukončení. Jelikož nevíš kde ty sekvence jsou, můžeš číst jen shora dolů.
Ale tak neverim ze si nemozem dat vypisat dajme tomu iba piaty riadok z textoveho suboru.
Ten program tail mi len bude vypisovat to co je v textovom subore iba nijako inak z neho neviem dostat data
Již jsem ti vysvětloval proč to nejde. Pokud mi nevěříš, asi nemá smysl, abych ti tu pomáhal.
Chytrému napověz, se zatvrzelím nepohneš 
btw. to je až takový problém si ten soubor načíst do pole a pak číst
od spodu? Nebo neukládej stále do toho samého souboru, aby nebyl tak velký a
pak bude počet dat potřebných ke čtení menší a už to půjde 
Prý je to 200 MB log, to určitě celé ukládat nemůže. Vyřeší to tak, že bude číst od začátku a ukládat až tehdy, kdy bude řádky potřebovat.
Však výstup toho programu tail si přesměruješ do svého programu a zpracuješ dle potřeby. Běžně to tak dělám. Záleží na tom, co s tím dál chceš dělat, nekdy stačí za to dát sed či awk. Na jednom řádku vyřešeno.
No asi mas pravdu len som fakt skusal co najjednoduchsie riesenie a asi to tak nepojde mam pocit. No asi budem musiet si cely subor prehladat a vytiahnut len tie data ktore potrebujem ale problem je v tom ze sa niekedy tie operacie (logy) opakuju .... viem si po urcitom case tam dat casovu peciatku ale problem je v tom ze nemusi byt stale dobre nastaveny systemovy cas pretoze tie logy ktore mi prichadzaju niesu zo systemu.
var lineCount = File.ReadLines(pathDesktop + @"\CLI_Log_copy.txt").Count();
nieco take som nasiel na nete a ulozi to vlastne pocet riadkov do premennej. No keby som potom dekrementoval tu premennú asi by to nešlo či ?
ReadAllLines ti načte všechny řádky do pole, to je u 200 mb trochu nepraktické.
Pokud je posledním znakem \n, bude to pocet radku o jeden mensi, ale to je chybou ve StreamReaderu, ktery se snazi byt moc chytry.
static StreamReader SouborOdzadu(string soubor, int pocetRadku)
{
var stream = new FileStream(soubor, FileMode.Open);
stream.Position = Math.Max(stream.Length - 1, 0);
while (stream.Position > 0 && pocetRadku > 0)
{
int current = stream.ReadByte();
if (current == '\n')
pocetRadku--;
stream.Position = Math.Max(stream.Position - 2, 0);
}
if (pocetRadku == 0)
stream.Position = Math.Min(stream.Position + 2, stream.Length);
return new StreamReader(stream);
}
Zobrazeno 19 zpráv z 19.