17. Zpracování textových souborů a práce s řetězci
Přidal/a Jarda dne November 29 2010 10:33:33
Opět odběhneme od matematiky a budeme se věnovat práci s textovými řetězci. Nejdříve si nachystáme jednoduchý prohlížeč textových souborů. Jeho funkcí bude, že do TextBoxu zobrazí obsah textového souboru. Využijeme již dříve získané zkušenosti.


Vytvoříme formulář s těmito objekty:

Menu – mnuOtevrit, mnuZavrit (Enabled=False), txtText (Enabled=False, MultiLine=True, Name=txtText, ScrollBars=Both, Text=prázdný), lblSoubor (Text=“Textový soubor načtete příkazem Soubor...Otevřít“)




– zde je událostní procedura, která proběhne při volbě Otevřít textový soubor:
Dim AllText, LineOfText As String
OpenFileDialog1.Filter = "Textové soubory (*.txt)|*.txt"


- Deklarujeme proměnné a přiřadíme hodnotu do vlastnosti Filter objektu dialogového okna Otevřít.
OpenFileDialog1.ShowDialog()


- procedura vyzve uživatele, aby zadal resp. Vybral cestu prostřednictvím objektu OpenFileDialog1
If OpenFileDialog1.FileName <> "" Then
Try 'Zkusí soubor otevřít a zachytí případné chyby


- Zachycuje chyby v bloku kódu Try...Catch
FileOpen(1, OpenFileDialog1.FileName, OpenMode.Input)
Do Until EOF(1) 'čte soubor po řádcích
LineOfText = LineInput(1)
'přidává postupně řádky do proměnné AllText


- Funkce LineInput kopíruje jeden řádek za druhým ze souboru do řetězcové proměnné AllText, kopíruje řádky tak dlouho, než narazí na konec souboru (EOF). Dojde-li při kopírování k chybě, zobrazí se o tom informace ve frázi Catch
AllText = AllText & LineOfText & vbCrLf
Loop 'aktualizuje popisek
lblSoubor.Text = OpenFileDialog1.FileName
txtText.Text = AllText 'zobrazí soubor
txtText.Select(1, 0) 'zruší výběr textu
txtText.Enabled = True 'zpřístupní obsah pole k úpravám
mnuZavrit.Enabled = True 'zpřístupní příkaz Zavřít
mnuOtevrit.Enabled = False 'zpřístupní příkaz Otevřít
Catch
MsgBox("Chyba při otevírání souboru.")
Finally
FileClose(1) 'Zavře soubor
End Try
End If


Další procedura je přiřazena nabídce Zavřít textový soubor:
txtText.Text = "" 'vyprázdní textové pole
lblSoubor.Text = "Textový soubor načtete příkazem Soubor...Otevřít."
mnuZavrit.Enabled = False
mnuOtevrit.Enabled = True

A takto vypadá výsledek:




Program můžeme upravit také tak, že přidáme jednoduchý textový editor. Podle výpisu jistě poznáte, jak program funguje.



Řetězcové funkce


V příkladu jsme pracovali s textem. Je velice užitečné umět pracovat s textem – s textovými řetězci. Řetězcové funkce budeme opět demonstrovat na našem příkladu. Menu doplníme o nabídky těchto funkcí



Len (řetězec)
Tato funkce vrací číslo, které udává délku textového řetězce ve znacích. Funkce vypadá takto:
Dim A As Integer
A = txtText.Text.Length
lblSoubor.Text = "Délka řetězce je " & A & " znakù"

Ucase
Tato funkce převede písmena v řetězci na velká
NovyText=Starytext.ToUpper
A v našem programu to vypadá takto:
Dim B As String
Dim C As String
B = txtText.Text
C = B.ToUpper
txtText.Text = C

LCase
Opak k předchozí funkci
NovyText=Starytext.ToLower
Mid
Tato funkce vrátí část řetězce, která začíná znakem původního řetězce, který je určen parametrem za počátek a délku určenou parametrem počet. Není-li délka určena, nový řetězec končí posledním znakém původního řetězce.
C = B.SubString(6,10)
InStr
Vyhledá počáteční pozici kratšího řetězce v delším řetězci – například písmena a (můžeme vyhledávat i slova – viz upravený příkaz v našem menu - InStr-slovo)
(Pokud bychom využili starší funkce InStr, můžeme volitelně nastavit parametr počátku vyhledávání):
C = InStr (2, „Visual Basic“, „Visual“) 'C=0...řetězec Visual se nepodařilo najít, protože jsme začali hledat až od druhého znaku)
Trim
Odstraní z řetězce vedoucí a koncové mezery
BezMezer=SMezerami.Trim

Úkoly:
1.Vyzkoušejte řetězcové funkce, zkuste upravit program i s jiným formulářem (zkuste využít třeba přepínač RadioButton – malou nápovědu najdete níže.)
2.Vytvořte a uložte spustitelný soubor (opakování)