All pastes #4320 Raw Edit

vb morse

public text v1 · immutable
#4320 ·published 2005-01-16 16:07 UTC
rendered paste body
'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