Zobrazit plnou verzi příspěvku: iLogic - jak najít konec textového souboru

Kubeczka
20.05.2021, 09:47
Chci číst data z textového souboru, data jsou uložena po řádcích. Potřebuji nastavit smyčku While tak, aby se zastavila na konci textového souboru.Jak to provést?Zde přikládám svůj kód:'***********************************************************************************************************
oRead = System.IO.File.OpenText("D:\Inventor\Databaze\P.txt")
'***********************************************************************************************************
MessageBox.Show("Soubor otevřen", "Title")
'***********************************************************************************************************
Dim oList As New ArrayList
Dim Radek As String

i = 0
Radek = oRead.ReadLine
MessageBox.Show(Radek, "Položka seznamu")
oList.Add(Radek)

While Not EOF ' ???
Radek = oRead.ReadLine
MessageBox.Show(Radek, "Položka seznamu")
oList.Add(Radek)
End While

'***********************************************************************************************************
oRead.Close()
'***********************************************************************************************************
MessageBox.Show("Soubor uzavřen", "Title")

Vladimír Michl
20.05.2021, 10:06
Těch možností je více. Buď čtete přes klasické Open file a kontrolujete EOF(), nebo pomocí StreamReader či OpenText a kontrolujete, zda načtený řádek něco vrátil - tedy zda je 'null', resp. není 'Nothing'.

Kubeczka
20.05.2021, 10:20
Děkuji.Můžete uvést příklady pro daná otevření souboru a následné testování konce textového souboru?

Vladimír Michl
20.05.2021, 11:55
Třeba tyto dvě možnosti:oFile = "C:\Temp\P.txt"
oRead = System.IO.File.OpenText(oFile)
ContentF = oRead.ReadToEnd()
oRead.Close()

'create aray from text info
oSplit = Split(ContentF, vbCrLf)

For Each wrd In oSplit
MessageBox.Show(wrd)
Next

'----------------------- NEBO ---------------------------

oRead = System.IO.File.OpenText(oFile)
Dim oList As New ArrayList
Dim Radek As String

Do
Radek = oRead.ReadLine()
If Not Radek Is Nothing Then
MessageBox.Show(Radek)
oList.Add(Radek)
End If
Loop Until Radek Is Nothing
oRead.Close()

Kubeczka
20.05.2021, 13:09
Děkuji mockrát.Mezitím jsem si vyzkoušel testovat konec souboru na prázdný řádek.Vaše příklady rád vyzkouším.S pozdravem

Kubeczka
21.05.2021, 08:16
Pane Michl, mám ještě jeden problém:Pokud se v textovém souboru nacházejí znaky s českou diakritikou, pak při přečtení dojde ke zmršení těchto znaků a místo nich se objeví kosočtverec s otazníkem, např. D�l�c�Jak na tuhle češtinu?Připomíná mi to používání české diakritiky v názvech adresářů a souborů.Vyhýbám se tomu jak čert kříži, ale někdy to nejde. Např. při tvorbě bat a cmd souborů

Vladimír Michl
21.05.2021, 09:26
V 8bitovém ANSI kódování textového souboru by se to asi muselo číst přes StreamReader, ale tyhle metody čtení očekávají univerzální kódování UTF, takže zkuste soubor přeuložit v Unicode. To je jistota.

Kubeczka
21.05.2021, 10:11
Děkuji za radu. Tohle jsem zatím nikdy neřešil. Můžete mi poradit, jak provést toto přeuložení. Děkuji

Vladimír Michl
21.05.2021, 10:35
Používám Notepad++ (Formát > Konvertovat do UTF-8 bez BOM), ale jde i v obyčejném Notepadu - Uložit jako, UTF-8.

Kubeczka
21.05.2021, 10:58
Děkuji za dobré rady. Funguje to skvěle.Zdravím