Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Citanie v textovom subore od konca smerom na zaciatok

Aktivity
Avatar
Tayson
Člen
Avatar
Tayson:19.11.2013 10:17

Zdravim

Je mozne mat textovy subor a potom si ho otvorit a citat od posledneho riadku cize od konca smerom nahor cize na zaciatok? Ako to docielim ?

 
Odpovědět
19.11.2013 10:17
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Tayson
David Hartinger:19.11.2013 10:21

IMHO to není možné. K čemu to potřebuješ?

Nahoru Odpovědět
19.11.2013 10:21
New kid back on the block with a R.I.P
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovídá na Tayson
Petr Nymsa:19.11.2013 10:21

K čemu to potřebuješ ? Načti si do pole všechny řádky a pak je čti obráceně ;)

Nahoru Odpovědět
19.11.2013 10:21
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Tayson
Člen
Avatar
Odpovídá na Petr Nymsa
Tayson:19.11.2013 10:27

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

 
Nahoru Odpovědět
19.11.2013 10:27
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Tayson
David Hartinger:19.11.2013 10:37

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.

Editováno 19.11.2013 10:37
Nahoru Odpovědět
19.11.2013 10:37
New kid back on the block with a R.I.P
Avatar
Tayson
Člen
Avatar
Tayson:19.11.2013 10:41

A neviem si zistit nejakym sposobom ake cislo ma posledny riadok a potom stale zmensovat o jedno co ja viem nejakych 30 riadkov a hladat posledny retazec ?

 
Nahoru Odpovědět
19.11.2013 10:41
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Tayson
David Hartinger:19.11.2013 10:49

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ů.

Nahoru Odpovědět
19.11.2013 10:49
New kid back on the block with a R.I.P
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Tayson
Kit:19.11.2013 10:55

Použij program tail.

Nahoru Odpovědět
19.11.2013 10:55
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Tayson
Člen
Avatar
Odpovídá na David Hartinger
Tayson:19.11.2013 10:59

Ale tak neverim ze si nemozem dat vypisat dajme tomu iba piaty riadok z textoveho suboru.

 
Nahoru Odpovědět
19.11.2013 10:59
Avatar
Tayson
Člen
Avatar
Odpovídá na Kit
Tayson:19.11.2013 11:00

Ten program tail mi len bude vypisovat to co je v textovom subore iba nijako inak z neho neviem dostat data

 
Nahoru Odpovědět
19.11.2013 11:00
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Tayson
David Hartinger:19.11.2013 11:11

Již jsem ti vysvětloval proč to nejde. Pokud mi nevěříš, asi nemá smysl, abych ti tu pomáhal.

Nahoru Odpovědět
19.11.2013 11:11
New kid back on the block with a R.I.P
Avatar
Odpovídá na David Hartinger
Jakub Lásko[Saarix]:19.11.2013 11:17

Chytrému napověz, se zatvrzelím nepohneš :-)

Nahoru Odpovědět
19.11.2013 11:17
Časem je vše možné.
Avatar
Odpovídá na Tayson
Jakub Lásko[Saarix]:19.11.2013 11:18

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 ;)

Nahoru Odpovědět
19.11.2013 11:18
Časem je vše možné.
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Jakub Lásko[Saarix]
David Hartinger:19.11.2013 11:22

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.

Nahoru Odpovědět
19.11.2013 11:22
New kid back on the block with a R.I.P
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Tayson
Kit:19.11.2013 11:30

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.

Nahoru Odpovědět
19.11.2013 11:30
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Tayson
Člen
Avatar
Odpovídá na David Hartinger
Tayson:19.11.2013 12:05

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.

 
Nahoru Odpovědět
19.11.2013 12:05
Avatar
Tayson
Člen
Avatar
Odpovídá na David Hartinger
Tayson:19.11.2013 12:07

var lineCount = File.ReadLines(pat­hDesktop + @"\CLI_Log_co­py.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 ?

 
Nahoru Odpovědět
19.11.2013 12:07
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Tayson
David Hartinger:19.11.2013 12:32

ReadAllLines ti načte všechny řádky do pole, to je u 200 mb trochu nepraktické.

Nahoru Odpovědět
19.11.2013 12:32
New kid back on the block with a R.I.P
Avatar
coells
Tvůrce
Avatar
coells:19.11.2013 12:55

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);
}
 
Nahoru Odpovědět
19.11.2013 12:55
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 19 zpráv z 19.