Zjištění aktuální pozice v UTF8 souboru – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Zjištění aktuální pozice v UTF8 souboru – .NET – Fórum – Programujte.comZjištění aktuální pozice v UTF8 souboru – .NET – Fórum – Programujte.com

 

ingiraxo+15
Grafoman
4. 11. 2012   #1
-
0
-

Zdravim,

mám takovej banální problém a mám asi výpadek, ale nechápu proč to nejde.

Mám normální UTF8 textovej soubor, kde je obsah třeba toto a potřebuju zjistit aktuální pozici pouze těch řádků, které začínají pomlčkou "-"

fsdfsddfdfsdfsa
-sdfsafsf

fsd

-sdfsdaf
fsadf

-sdafsa

pro ukázku zjištění pozic mám toto

            List<int> positions = new List<int>(); // pozice radku, co zacinaji "-"
            int actualPosition = 0;

            // soubor musí být v UTF8
            using (StreamReader sr = new StreamReader(File.OpenRead(path), Encoding.UTF8))
            {
                sr.BaseStream.Seek(0, SeekOrigin.Begin);

                while (!sr.EndOfStream)
                {
                    string line = await sr.ReadLineAsync(); // přečte řádek

                    if (ContainsValideKey(line)) // pokud řádek začíná "-" + další prvky...
                    {
                        positions.Add(actualPosition);
                    }
                    actualPosition += line.Length; // i když jsem přidal +1 jako "\n", tak to nejde podle představ
                }
            }

a pro vypsání pozic toto (nechci zbytecne prochazet celej soubor, ale pouze ty radky, ktere zacinaji "-" a pozice jsem jsi zjistil vyse

            using (StreamReader sr = new StreamReader(File.OpenRead(path), Encoding.UTF8))
            {
                for (int i = 0; i < positions.Count; i++)
                {
                    // zde chci precist pouze radky, ktery zacinaji "-" podle offsetu
                    sr.BaseStream.Seek(positions[i], SeekOrigin.Begin);
                    string line = await sr.ReadLineAsync();
                    Console.WriteLine(positions[i] + ") " + line);
                }
            }

Bohužel to vůbec nefunguje jak jsem očekával, i když jsem řádek převedl na byte[] a přičetl součet, tak taky ne a vlastnost Position co je BaseStreamu mi vždy vrátí maximální pozici v souboru

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
ingiraxo+15
Grafoman
4. 11. 2012   #2
-
0
-

ještě bych dodal, že některej řádek končí CR, některej LF a některej CRLF

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
CZechBoY+4
Věrný člen
4. 11. 2012   #3
-
0
-

#2 ingiraxo
to by mohlo jít obyčejným regulárem (možná ani to ne)

prostě budeš hledat sekvenci CR+"-" nebo LF+"-"

Nahlásit jako SPAM
IP: 213.192.10.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 89 hostů

Podobná vlákna

Zjištění aktuální stránky — založil Blujacker

Zjištění pozice oka — založil MiCizek

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý