Zjisteni poctu radku v souboru   zodpovězená otázka

Algoritmy, I/O operace

Zdravim,

chtel bych se zeptat, jestli se da zjistit pocet radku v textovem souboru, bez toho abych musel projit cely soubor a radky pocitat?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ahoj,

zkus třeba pomocí ReadAllLines načíst soubor do pole stringů, kde je vždy jeden řádek načten do jedné položky pole -> počet prvků v poli = počet řádků.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

tomu nacteni celyho souboru jsem se chtel prave vyhnout

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ne, bez procházení souboru to nelze udělat. Jak by to asi šlo, když konec řádku se pozná podle určitého znaku? Mimochodem načítat řádky do pole String není vhodné řešení, představte si že by měl soubor velikost 3 GB.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

to chapu, ze nacitat radky do pole neni vhodny. Me slo o to, kdyz budu nacitat soubor po radcich, abych mohl zobrazit progressbar, ktery by ukazoval kolik procent souboru je nacteno. Mate nejakou radu, jak tohle resit?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Nejlepší způsob je načítat soubor po řádcích. A ty počítat, ale nikam neukládat. Soubor stejně musíte projít celý, aby program objevil všechny konce řádků. Tuto metodu můžete ještě vylepšit pomocí binárního načítání (vyřešíte tím problém dlouhých řádků - jejich načítání bude rychlejší), ale pro začátek bude naprosto dostačující konstrukce:

Dim radku As Integer = 0
Do While file.IsEOF = False
   file.ReadLine()
   radku = radku + 1
Loop

Možná je v kódu chyba, psal jsem to z hlavy, ale mělo by Vás to nasměrovat.

nahlásit spamnahlásit spam 2 / 2 odpovědětodpovědět

Tento kód bude považovat každou skupinu znaků CR LF jako konec řádku (používá se ve Windows). Počet řádků bude v proměnné lineCount, průběh prohledávání souboru (vyjádřeno v procentech 0-100%) bude v proměnné progress.

Dim buffer(0) As Char
Dim fileName As String = "C:\Soubor.txt"
Dim length As Long = FileLen(fileName)
Dim lineCount As Integer = 1
Dim progress As Double
Dim readBytes As Long
Using file As New StreamReader(fileName)
  While Not file.EndOfStream
    'Načíst další znak ze souboru
    readBytes += file.Read(buffer, 0, 1)
    'Když je načtený znak CR a další znak LF tak byl
    'nalezen řádek
    If buffer(0) = vbCr AndAlso file.Peek() = 10 Then
      lineCount += 1
    End If
    'Vypočítat průběh načítání souboru pomocí počtu
    'načtených znaků a známé velikosti souboru
    progress = (readBytes * 100) / length
  End While
End Using

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:  
Heslo:  

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback