Letter vervangen - VB.net

Status
Niet open voor verdere reacties.

JenPi

Gebruiker
Lid geworden
11 jan 2015
Berichten
16
Hallo,

ik probeer een programma te schrijven waarin ik in een text string een letter (de eerste die men tegenkomt) vervangt door een andere opgegeven letter.

Ik heb 4 text velden (invoer van de tekst txtInvoer, de letter die gezocht wordt txtZoek, de letter die in de plaats komt txtVervang, en een uitvoer veld met het resultaat txtUitvoer)
en een button "btnVervang"

Ik moet hiervoor de functie in een aparte module schrijven met de vorm "Function VervangLetter(strTekst As String, strOudeLetter As String, strNieuweLetter As String) As String"
(In de opgave wordt als tip gegeven om de functie inStr te gebruiken)
Ook moet de tekst langer zijn dan 1 letter en de zoek- en vervangletter moet 1 letter zijn (Len = 1)

ik heb reeds een deel van de code uitgeschreven maar heb hiermee 2 issues:
namelijk, als een letter niet gevonden wordt dan krijg ik met de inStr functie een 0 als waarde, en daar loopt het programma op vast.
Ik heb geprobeerd om een if statement in te bouwen in te functie

if inStr = 0 dan txtUitvoer.text = txtInvoer.text (dus de uitvoer zal hetzelfde zijn als invoer)
else
replace function

Maar dit lukte niet.

Een tweede issue, het uitvoer veld geeft enkel de tekst terug na de positie van de te vervangne letter

VOORBEELD:
dit is een test! (d vervangen door D) -> lukt met mijn huidige code en uitvoerveld wordt "Dit is een test!"
Dit is een test! (d vervangen door t) -> d komt niet voor in de tekst, dus inStr = 0 n dan loopt het progamma vast
Dit is een test! (e vervangen door d) -> lukt maar in uitvoerveld komt "den test!"


De code:

Public Function VervangLetter(strTekst As String, strOudeLetter As String, strNieuweLetter As String) As String
Dim intPositie As Integer

intPositie = InStr(strTekst, strOudeLetter)
VervangLetter = Replace(strTekst, strOudeLetter, strNieuweLetter, intPositie, 1)

End Function

Private Sub btnVervang_Click(sender As Object, e As EventArgs) Handles btnVervang.Click
Dim strNieuw As String

If (Len(txtInvoer.Text) < 1) Or (Len(txtZoek.Text) <> 1) Or (Len(txtVervang.Text) <> 1) Then
Exit Sub
Else
strNieuw = VervangLetter(txtInvoer.Text, txtZoek.Text, txtVervang.Text)
txtUitvoer.Text = strNieuw
End If
End Sub

Alvast bedankt voor de moeite!

Jen
 
Ik denk dat je de Replace functie verwart met de Mid functie. Eigenlijk heb je die VervangLetter functie niet nodig, maar doe hem eens zo:
Code:
Public Function VervangLetter(strTekst As String, strOudeLetter As String, strNieuweLetter As String) As String
        VervangLetter = Replace(strTekst, strOudeLetter, strNieuweLetter)
End Function

Zonder de VervangLetter functie zou je _Click routine er zo uit kunnen zien:
Code:
Private Sub btnVervang_Click(sender As Object, e As EventArgs) Handles btnVervang.Click
    If (Len(txtInvoer.Text) > 0) And (Len(txtZoek.Text) = 1) And (Len(txtVervang.Text) > 0) Then
        txtUitvoer.Text = Replace(txtInvoer.Text, txtZoek.Text, txtVervang.Text)
    End If
End Sub
 
Laatst bewerkt:
Dat werkt inderdaad ook, maar hij mag enkel de eerste letter vervangen die hij tegenkomt (bijvoorbeeld de eerste 'e') en in uw voorbeeld vervangt hij alle 'e'.

Daarom had ik er de inStr in verwerkt zodat hij start vanaf de positie waar hij de eerste 'e' tegenkomt en enkel deze vervangt...
 
Dat zeg ik, dan moet je de Mid functie gebruiken en niet de Replace.
Zoiets dus:

Code:
Public Function VervangLetter(strTekst As String, strOudeLetter As String, strNieuweLetter As String) As String
    Mid(strTekst, InStr(1, strTekst, strOudeLetter, vbTextCompare), 1) = strNieuweLetter
    VervangLetter = strTekst
End Function
 
Laatst bewerkt:
Hey Edmoor,

bedankt voor de feedback. Ik heb replace vervangen door de mid functie maar er zit nog 1 issue in...

dit is een test --> als ik kleine d vervang door grote D, krijg ik "Dit is een test"
Dit is een test --> als ik kleine e vervang door kleine d, krijg ik "Dit is den test"

maar

Dit is een test! --> als ik kleine d vervang door kleine t; krijg ik "tit is een test"

Hij houdt dus geen rekening met hoofdlettergevoeligheid en dit zou wel moeten... volgens mijn opgave zou hij in dit geval de kleine d niet vinden en als resultaat geven "Dit is een test" (maw er is niks veranderd)

Kan ik ergens in de functie verwerken dat

if "InStr(1, strTekst, strOudeLetter)" = 0 (dus met andere woorden, strOudeLetter wordt niet gevonden) dat er niks gebeurd en txtUitvoer gelijk wordt als txtInvoer?
 
De functie in #4 is hoofdlettergevoelig, dus als je een D zoekt zal hij niet de d vinden. Als dat bij jou niet zo is wil ik je complete Function en Sub graag zien zoals ze nu zijn.
 
Laatst bewerkt:
Vreemd, zonet kreeg ik nog 'tit is een test' maar nu loopt het programma gewoon vast omdat hij de hoofdletter D niet vindt...
Hoe kan ik dan alsnog de code aanpassen dat hij niet vastloopt als hij de letter niet vindt?

nogmaals dank voor je hulp!


dit is de code tot nu toe:

Public Class frmVervangLetter
Public Function VervangLetter(strTekst As String, strOudeLetter As String, strNieuweLetter As String) As String
Mid(strTekst, InStr(1, strTekst, strOudeLetter), 1) = strNieuweLetter
VervangLetter = strTekst

End Function


Private Sub btnSluit_Click(sender As Object, e As EventArgs) Handles btnSluit.Click
End
End Sub

Private Sub btnWis_Click(sender As Object, e As EventArgs) Handles btnWis.Click
txtInvoer.Text = Nothing
txtZoek.Text = Nothing
txtVervang.Text = Nothing
txtUitvoer.Text = Nothing

End Sub

Private Sub btnVervang_Click(sender As Object, e As EventArgs) Handles btnVervang.Click
Dim strNieuw As String

If (Len(txtInvoer.Text) < 1) Or (Len(txtZoek.Text) <> 1) Or (Len(txtVervang.Text) <> 1) Then
Exit Sub
Else
strNieuw = VervangLetter(txtInvoer.Text, txtZoek.Text, txtVervang.Text)
txtUitvoer.Text = strNieuw
End If
End Sub
End Class
 
Met jouw code krijg ik dus "tit is een test" (zie afbeelding)

DitIsEenTest.jpg

Ik had er even de "vbTextCompare" uitgelaten in de code hierboven om te zien of dat een verschil gaf qua hoofdlettergevoeligheid, maar toen lukte het al helemaal niet meer :confused:
 
Laatst bewerkt:
En bij mij gebeurt dat dus niet. Dit is dezelfde functie maar dan met controle of de te zoeken letter is gevonden:
Code:
Public Function VervangLetter(strTekst As String, strOudeLetter As String, strNieuweLetter As String) As String
    Dim Positie As Integer
    Positie = InStr(1, strTekst, strOudeLetter)
    If Positie > 0 Then
        Mid(strTekst, Positie, 1) = strNieuweLetter
    End If
    VervangLetter = strTekst
End Function

Probeer het daar eens mee.
 
Ok dan. Veel plezier ermee :)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan