vba replace tekst tussen haakjes in string probleem

Status
Niet open voor verdere reacties.

JohanRVT

Gebruiker
Lid geworden
2 mrt 2011
Berichten
555
Bij het importeren van de BEId (Belgische indentitetskaart gegevens) zijn er soms gemeenten met deelgemeenten met hun eigen postnummer waarbij dat de straatnaam de eerste letter van de deelgemeente meekrijgt tussen haakjes.

Otegemplaats(O) 4 komt er dus uit en 't zou Otegemplaats 4 moeten worden
Op zich geen probleem ware het niet dat Google maps daar moeilijk over doet als je de string dan gebruikt in je zoekfunctie (zonder de haakjes werkt het prima)

Een haakje verwijderen uit de string lukt prima (zie hieronder, maar hoe doe je 't voor die drie karakters ineens te wijzigen in niets (misschien zijn het ook meer karakters soms)?
Bewuste onderdeeltje van hetgeen wat ik nu heb :
Code:
'code hierboven is van geen tel
strStreet = MapColAddress.GetValue("Street")
   ' google maps werkt niet goed met een straatnaam met gemeenteafkorting tussen haakjes in
   ' indien het zo op de EID staat geeft dit de straat weer zonder dat er haakjes in staan met de deelgemeente

   If InStr(strStreet, ")") > 0 Then
        strConvertedStreet = Replace(strStreet, ")", "")
   Else
        strConvertedStreet = strStreet
   End If
'code hieronder is van geen tel
 
Met Replace kun je één string tegelijk vervangen, dus de klus zul je voor elk teken apart moeten uitvoeren. Dus iets als:

Code:
   If InStr(strStreet, "(") > 0 Then
        strConvertedStreet = Replace(strStreet, "(", "")
   End If
   If InStr(strConvertedStreet , ")") > 0 Then
        strConvertedStreet = Replace(strConvertedStreet , ")", "")
   End If
Etc.
 
Michel,

Harry heeft de oplossing aangebracht in http://office.webforums.nl

Code:
   strStreet = MapColAddress.GetValue("Street")
   ' google maps werkt niet goed met een straatnaam met gemeenteafkorting tussen haakjes in
   ' indien het zo op de EID staat geeft dit de straat weer zonder dat er haakjes in staan met de deelgemeente

    iPos = InStr(strStreet, "(")
    iPos2 = InStr(strStreet, ")")
        If iPos > 0 Then
            strConvertedStreet = Left$(strStreet, iPos - 1) & "" & Mid$(strStreet, iPos2 + 1)
        End If

Dus voorlopig opgelost maar ik hou 't in de gaten hoe 't werkt met de verschillende ID's, misschien duiken er toch nog problemen op
 
Als je dat de oplossing vindt: deze oplossing vindt namelijk alleen de eerste haakjes. Loop je onverhoopt aan tegen een string waarin de haakjes twee keer gebruikt worden, dan ben je alsnog de pineut. Ik zie dus geen voordeel tegenover mijn oplossing, die ik zelf dus zou gebruiken :)
 
Haakjes () worden tot nu toe maar éénmailg gebruikt
Ik test even ook uw manier uit
 
@JohanRVT,

je kan beide oplossingen gebruiken.
Zou Harry's oplossing gebruiken, deze geeft een exacte invulling van je vraagstelling.
En omdat OctaFish het (wederom) nodig vind om op een zelfzuchtige manier op te moeten komen voor zijn gedachtengoed. breek ik even een lans voor Harry.
Harry beweegt zich op een niveau waar OctaFish alleen maar van kan dromen.
Oftewel, oplossingen van Harry zijn altijd top.

Tardis
 
Oh tardisje, wat laat jij je weer heerlijk kennen..... Ik heb namelijk helemaal niks tegen Harry's oplossing, noch daar iets van afgedongen.... Ik vind overigens niet dat die oplossing een exacte invulling geeft, met argumenten die je hierboven kunt lezen, dus die ga ik hier niet herhalen.
Ik ben benieuwd naar de argumentatie voor jouw conclusie dat Harry zich op een voor mij slechts in mijn dromen bereikbaar niveau beweegt; iets wat jij overigens alleen maar kunt weten als je daar zelf ook bivakkeert. Want waar haal je die wijsheid anders vandaan? Maar natuurlijk: jij staat nog hoger! Alleen dan kun je met recht een oordeel vellen over de capaciteiten van twee medeplaneters. Tenzij jij je op mijn niveau beweegt, en dus huizenhoog tegen Harry opkijkt omdat hij (en dàt is een conclusie die ik van harte onderstreep) inderdaad met oplossingen komt die ik nog nooit uit jouw koker heb gezien. Maar die argumentatie zal wel nooit komen, want jij komt maar heel zelden met a) oplossingen en b) zinnige argumenten. Slap Ins Blaue Hinein kleppen gaat je daarentegen als de beste af.... En daar zal je ook jouw laatste gedachtespinsel wel hebben gevonden.
Ik moet zeggen: ik had meer waardering voor je toen je dit forum links liet liggen...
En Harry: ik vind jou bijdragen ook van een uitstekend gehalte :thumb:
 
Laatst bewerkt:
bijkomende zaken

Hallo groep,

laatst nog wat verder gewerkt aan de code na ondertussen op 2 bijkomende problemen te zijn gestoten:
1. de BEID kaart slaat het geslacht van de persoon op als M of F (terwijl wij in onze DB de afkortingen M en V gebruiken) in de "Gender"
Heb dat zo opgelost:
Code:
strGender = MapColID.GetValue("Gender")
        If notexists = InStr(strGender, "M") = 0 Then
            strconvertedgender = MapColID.GetValue("Gender")
        End If
        If exists = InStr(strGender, "M") <> 0 Then
            strconvertedgender = "V"
        End If
2. De straat van het adres wordt zoals eerder gesteld bij de ene gemeente met (tussen haakjes) de deelgemeente weergegeven en bij andere weer niet waardoor er ook foutmeldingen kwamen
Heb dat zo opgelost:
Code:
strStreet = MapColAddress.GetValue("Street")
 ' google maps werkt niet goed met een straatnaam met gemeenteafkorting tussen haakjes in
 ' indien het zo op de EID staat geeft dit de straat weer zonder dat er haakjes in staan met de deelgemeente
    If notexists = InStr(strStreet, "(") = 0 Or InStr(strStreet, ")") = 0 Then
            strConvertedStreet = MapColAddress.GetValue("Street")
    End If
    
    If exists = InStr(strStreet, "(") <> 0 Or InStr(strStreet, ")") <> 0 Then
                iPos = InStr(strStreet, "(")
                iPos2 = InStr(strStreet, ")")
                If iPos > 0 Then
                    strConvertedStreet = Left$(strStreet, iPos - 1) & "" & Mid$(strStreet, iPos2 + 1)
                 End If
    End If

Tot nu toe werken beide codes naar behoren en krijg ik geen foutmeldingen maar naar mijn gevoel zijn ze eenvoudiger of beter te maken. :o
Graag jullie opbouwende ideeën
 
Waarom je in de tweede code met Exists werkt is mij een klein raadsel; Instr levert een waarde > 0 op als een string gevonden wordt. Dus door op >0 te testen met Instr doe je al genoeg. En hetzelfde geldt voor de eerste code, die kan zonder nonexists en zonder instr. Gewoon controleren of strGender "M" is of iets anders.
 
Laatst bewerkt:
Octafish,
ik puzzel een en ander tesamen tot het werkt en soms lukt het me maar via een omweg. :confused:
Ik zit nog met een probleem bij het inscannen van een naam met bv een letter "ë" in komt dat eruit als een "ë" ER zullen in de namen en voornamen van de personen wel meer zo'n tekens voorkomen.
Ik heb die ë vervangen via een replace naar de letter ë maar jij heb vroeger eens een diakriet funcitie gemaakt, ik kreeg die niet werkend.
Zou je dat kunnen toepassen op mijn situatie. Ik heb het aangekaart op
http://office.webforums.nl/viewtopic.php?f=6&t=45575 of, als je me wilt helpen zet je het liever hier voort?
 
Ik gebruik nu de volgende code om bij het importeren van een naam een aantal tekens te vervangen
Code:
Me.BNaam = Replace(Replace(Replace(strName, "ë", "ë"), "é", "é"), "è", "è")

Aangezien die rare tekens maar blijven bijkomen zoek ik iets algemener in bv een module; hoe doe je dat?
 
Ik zou toch een functie overwegen waarin je alle mogelijkheden neerpent die je wilt vervangen. Ik gebruik zelf met deze functie om een tekststring html-proof te maken.

Code:
Function StripTekst(Veld As String) As String
Dim txt As String

txt = Veld

    If InStr(1, txt, " ") > 0 Then txt = Replace(txt, " ", "%20")
    If InStr(1, txt, " ") > 0 Then txt = Replace(txt, " ", "%20")
    If InStr(1, txt, ":") > 0 Then txt = Replace(txt, ":", "%3A")
    If InStr(1, txt, ".") > 0 Then txt = Replace(txt, ".", "%2E")
    If InStr(1, txt, ";") > 0 Then txt = Replace(txt, ";", "%3B")
    If InStr(1, txt, "/") > 0 Then txt = Replace(txt, "/", "%2F")
    
    If InStr(1, txt, Chr(34)) > 0 Then txt = Replace(txt, Chr(34), "%22")
    If InStr(1, txt, Chr(39)) > 0 Then txt = Replace(txt, Chr(39), "%27")
    If InStr(1, txt, Chr(35)) > 0 Then txt = Replace(txt, Chr(35), "%23")
    If InStr(1, txt, Chr(36)) > 0 Then txt = Replace(txt, Chr(36), "%24")
    If InStr(1, txt, Chr(33)) > 0 Then txt = Replace(txt, Chr(33), "%21")
    If InStr(1, txt, Chr(38)) > 0 Then txt = Replace(txt, Chr(38), "%26")
    If InStr(1, txt, Chr(40)) > 0 Then txt = Replace(txt, Chr(40), "%28")
    If InStr(1, txt, Chr(41)) > 0 Then txt = Replace(txt, Chr(41), "%29")
    If InStr(1, txt, Chr(42)) > 0 Then txt = Replace(txt, Chr(42), "%2A")

StripTekst = txt

End Function

Die zou je simpel moeten kunnen aanpassen; kwestie van de zoekwaarden vervangen en de vervangingswaarden.
 
Michel,

ik ben ergens eens een "diakriet" moduel van U tegen gekomen maar kreeg dat niet aan de praat. Prefereer je dus nu deze methode?
 
Ik doe ook maar wat :D
Er gaan verschillende wegen naar Rome; de module die je bedoelt doet het bij mij prima, dus ik weet niet waarom hij het bij jou niet zou doen. Die kan overigens met veel meer teksten overweg, dus ik gebruik die zeker nog. Als het om een beperkt aantal te vervangen tekens gaat, is bovenstaande werkwijze net zo effectief. Ik zou zeggen: kijk wat bij jou het beste werkt! En als het voldoet, dan ben je een stuk dichter bij de oplossing ;)
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan