'Deze array bevat de tekens waarvoor een morse vertaling bestaat
'We kennen nog geen dimensie toe
Dim msarrTeken() As String
'Deze array bevat de vertaling van elk teken in de vorige array
'We kennen nog geen dimensie toe
Dim msarrMorse() As String
Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
InitApplicatie()
End Sub
Private Sub InitApplicatie()
'1. Haal de volledige naam van het morsebestand uit de registry op
' en toon deze op de form
txtBestandsnaam.Text = GetMorseFileFromRegistry()
'2. Enable en disable de controls
EnableDisableControls()
End Sub
Private Sub btnzoeken_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnzoeken.Click
'Kies een nieuw morse-bestand
KiesMorseBestand()
End Sub
Private Function GetMorseFileFromRegistry() As String
'Haal de locatie van de conversiefile uit de registry op
'application section key default
Return GetSetting("MorseVertaler", "Files", "Conversiefile", "")
End Function
Private Sub SetMorseFileInRegistry(ByVal sVolNaam As String)
'Bewaar de morse-conversiefile in de registry
SaveSetting("MorseVertaler", "Files", "Conversiefile", sVolNaam)
End Sub
Private Sub LeesBestandIn(ByVal sBestandsnaam As String)
'De Lisbox ledigen
lstMorse.Items.Clear()
'Bestaat de file
If System.IO.File.Exists(sBestandsnaam) Then
'Tel de lijnen in de file
Dim iAantalLijnen As Integer
iAantalLijnen = GetAantalLijnen(sBestandsnaam)
'De arrays dimensioneren
ReDim msarrMorse(iAantalLijnen - 1)
ReDim msarrTeken(iAantalLijnen - 1)
'StreamReader aanmaken
Dim srMorse As New System.IO.StreamReader(sBestandsnaam)
'Lees alle lijnen uit de file
'en verwerk elke ingelezen lijn
Dim iLijn As Integer = 0
Dim sLijn As String
'Eerst een lijn lezen vooraleer we de lus binnengaan
sLijn = srMorse.ReadLine()
'Lijnen inlezen en verwerken
'totdat we aan het einde van het bestand komen
'Op dat ogenblik gaat de streamreader Nothing returnen
Do While Not sLijn Is Nothing
'Do Until sLijn Is Nothing 'gaat ook
If sLijn <> "" Then
VerwerkLijn(sLijn, iLijn)
End If
'Volgende lijn lezen
sLijn = srMorse.ReadLine()
iLijn += 1
Loop
'streamreader sluiten
srMorse.Close()
End If
'De controls enablen en disablen
EnableDisableControls()
End Sub
Private Function GetAantalLijnen(ByVal sBestandsnaam As String) As Integer
'StreamReader aanmaken
Dim srMorse As New System.IO.StreamReader(sBestandsnaam)
'Tel het aantal lijnen in deze file
Dim iAantal As Integer = 0
Dim sLijn As String
sLijn = srMorse.ReadLine
Do While Not sLijn Is Nothing
iAantal += 1
sLijn = srMorse.ReadLine
Loop
'File sluiten
srMorse.Close()
'Aantal returnen
Return iAantal
End Function
Private Sub VerwerkLijn(ByVal sLijn As String, ByVal iIndex As Integer)
'Plaats het teken in de array msTeken
msarrTeken(iIndex) = sLijn.Substring(0, 1)
'Plaats de morsevertaling in de array msMorse
msarrMorse(iIndex) = sLijn.Substring(2)
'Voeg deze gegevens ook aan de listbox toe
lstMorse.Items.Add(msarrTeken(iIndex) & " " & msarrMorse(iIndex))
End Sub
Private Sub EnableDisableControls()
'Men kan maar tekst ingeven, als er een vertalingslijst is
If lstMorse.Items.Count = 0 Then
txtInput.Enabled = False
Else
txtInput.Enabled = True
End If
End Sub
Private Sub KiesMorseBestand()
'De openFileDialoog instellen
'- De InitialDirectory
ofdMorseBestand.InitialDirectory = GetMorseFileFromRegistry()
'De openFileDialoog tonen
If ofdMorseBestand.ShowDialog() = DialogResult.OK Then
'Als de gebruiker een bestand heeft gekozen
'Bewaren we de volledige naam in het register
SetMorseFileInRegistry(ofdMorseBestand.FileName)
'en tonen we de volledige naam in het tekstvak
txtBestandsnaam.Text = ofdMorseBestand.FileName
End If
End Sub
Private Sub txtBestandsnaam_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtBestandsnaam.TextChanged
'Bestand wijzigt, dus opnieuw inlezen
LeesBestandIn(txtBestandsnaam.Text)
'Enable disable controls
EnableDisableControls()
End Sub
Private Sub txtInput_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtInput.TextChanged
'Vertaal de ingegeven tekst
txtMorse.Text = VertaalTekst(txtInput.Text)
End Sub
Private Function VertaalTekst(ByVal sTekst As String)
'Doorloop de letters van de tekst en vertaal ze één voor één
Dim sResult As String, iTeller As Integer
For iTeller = 0 To sTekst.Length - 1
sResult &= VertaalLetter(sTekst.Substring(iTeller, 1)) & " "
Next
'Return de vertaalde tekst
Return sResult
End Function
Private Function VertaalLetter(ByVal sTeVertalenLetter As String) As String
'Zoek het te vertalen teken op in de array msarrTeken
Dim iTeller As Integer
For iTeller = 0 To msarrTeken.Length - 1
'Indien gevonden, return de overeenkomstige vertaling in morse
If msarrTeken(iTeller).ToLower() = sTeVertalenLetter.ToLower() Then
Return msarrMorse(iTeller)
End If
Next
'Teken is niet gevonden, we returnen een ?
Return "?"
End Function
End Class