In een tekstvak een zin met een hoofdletter laten beginnen

Status
Niet open voor verdere reacties.

Saalk

Gebruiker
Lid geworden
3 jan 2011
Berichten
85
Hallo Lezers,
Ik heb een database waar ik cryptogrammen vraag en antwoorden in op sla.
Nu wil ik dat als er in het tekstvak getypt wordt de eerste letter een hoofdletter is en de rest hoofd en kleine letters.
Ik heb het geprobeerd met

Private Sub Omschrijving_AfterUpdate()
Me!Omschrijving = StrConv(Me!Omschrijving, 3)
End Sub

dat werkt wel maar als een spatie plaatst gaat het daarna weer met een hoofdletter beginnen.
Weet iemand hier een oplossing voor.
 
Probeer dit eens:

Code:
Private Sub Omschrijving_AfterUpdate()
    
    Me.Omschrijving.Value = UCase(Left(Me.Omschrijving.Value, 1)) & LCase(Right(Me.Omschrijving.Value, Len(Me.Omschrijving.Value) - 1))

End Sub

Dit werkt uiteraard niet als je begint met een spatie.
Werkt evenmin bij teksten, waar er na een punt ook een hoofdletter moet komen.

Bovendien zal het in sommige gevallen zelfs irriterend werken. Wat ga je doen als je bijvoorbeeld eigennamen (Antwerpen; Brussel; Jan ) enz. in een zin gebruikt. Dan slaag je er niet in om een hoofdletter midden in de zin te gebruiken.
Idem voor woordjes als God, die eveneens met een hoofdletter moeten beginnen.

Het engelse I lukt ook al niet.
Ik zou deze code dus niet gebruiken.

succes ermee
Luc
 
Laatst bewerkt:
Hoi Luc,

Bedankt voor je antwoord.
Dat is nou net wat ik wel wil ook hoofd letters in een zin en kleine door elkaar.
Is er misschien een andere oplossing hier voor?
Alvast bedankt
 
Je zou die laatste LCase kunnen weglaten. Dan krijg je enkel een hoofdletter in het begin van je tekst, en de rest blijft ongewijzigd.
Uiteraard kan je nog iets verzinnen voor elke eerste letter na een punt, maar er zijn te veel uitzonderingen om met alles rekening te houden.
Sorry... maar ik begin er gewoonweg niet aan.

Code:
Private Sub Omschrijving_AfterUpdate()
    
    Me.Omschrijving.Value = UCase(Left(Me.Omschrijving.Value, 1)) & Right(Me.Omschrijving.Value, Len(Me.Omschrijving.Value) - 1)

End Sub

Een voorbeeld van een zin, die een hoop uitzonderingen bevat:

't Zal je kind maar wezen als ze bv. net als de plant marjolein Marjolein noemt en bovendien lid is van het VB.
 
Zoals Luc al aangaf: nee. Je moet dit soort restricties niet willen in een tekstvak, zeker niet als er variabele gegevens in mogen worden getypt. Jan gaf wat plaatsnamen aan als voorbeeld om het niet te doen. Ik weet er nog wel een paar: s'-Gravenhage bijvoorbeeld. Wil je echt niet met een hoofletter laten beginnen en dan de G in klein. Kortom: niet doen.
 
Luc

Ik heb het geprobeerd het werkt wel zoals bedoeld er zitten wel beperkingen aan.

Bedankt voor de hulp.
 
OtaFish,

U ook bedank voor u advies.
Vriendelijke groet
 
Als het al niet bestaat... dan zal het in de toekomst zeker nog komen hoor, een programma dat je zinnen correct neerzet.
Maar dan begin je al met AI.
En dat is zoveel programmeerwerk, en onderhoud dat wanneer je het hebt, je er wellicht zelfs geld mee kan verdienen.

Voor de non-believers: kijk maar 's naar Google translate. Die leveren al prachtig vertaalwerk wat 30 jaar geleden door velen ook als totaal onmogelijk gehouden werd.
 
Als het al niet bestaat... dan zal het in de toekomst zeker nog komen hoor, een programma dat je zinnen correct neerzet.
Ik vraag me dat af. Sommige zaken zijn het investeren niet waard, en dit lijkt mij er één van. Er zijn gewoonweg teveel talen om dat allemaal correct af te vangen. En met Google Translate denk ik in 90% van de gevallen: dat klopt dus écht niet. Taal is gewoon nog even te lastig om aan computers over te laten.

Wat je (weer on topic) nog wél kan doen: gebruik niet de methode van luc, maar lees je tekst in in een array, en behandel elk woord apart. M.b.v. een uitzonderingenlijst (plaatsnamen, eigennamen etc.) kun je dan elk afzonderlijk woord vergelijken met de lijsten die je hebt gemaakt, en op basis daarvan bepalen of het woord moet beginnen met een hoofdletter of niet. Is wel een hoop werk om te maken (al kun je eigennamen en plaatsnamen nog wel ergens downloaden) maar werkt verder vrij strak.
 
Ik heb het geprobeerd dat wat Luc heeft aan gegeven het werkt, er zullen best wel dingen zijn die het niet doen die kan ik dan wel veranderen in de tabellen.
Ik ben bang wat u aangeeft mij boven de pet gaat.
Ik heb nog wel een vraag maar ik weet niet of ik die hier mag stellen of een nieuwe moet aanvragen.

Vriendelijke groet
 
Als de vraag met deze vraag te maken heeft: gewoon erbij zetten. Is het een totaal ander onderwerp, dan een nieuwe vraag maken. Als een antwoord boven je pet gaat (en dat kan uiteraard best; niet iedereen beschikt over dezelfde kennis) dan zou ik zeggen: post een voorbeeldje, dan maken we dat inzichtelijk. Kun je altijd nog bekijken of je dat wilt gebruiken of niet. Bij een cryptogram zou het overigens niet uit mogen maken of er hoofd- of kleine letters worden ingevuld. Volgens mij gaat het bij crypto's om de juiste letters, niet om de juiste spelling, interpunctie of hoofdlettergebruik. Maar wellicht vul ik te weinig crypto's in. Of zijn die van jou te hoog gegrepen voor mij :).
 
Ik zal de database foto's erbij doen u ziet op de foto dat de telling van het aantal woorden verschillend is ik heb ze met omcirkelt.
De meeste code is van u hand. wilt u er misschien naar kijken.
bvb hartelijk dank
 

Bijlagen

  • Crypto .jpg
    Crypto .jpg
    419,3 KB · Weergaven: 39
  • 1.png
    1.png
    100,7 KB · Weergaven: 24
  • 2.png
    2.png
    113,8 KB · Weergaven: 31
  • 3.png
    3.png
    104,5 KB · Weergaven: 40
Ik weet niet waar ik naar zitten kijken, noch wat het probleem is. Ik vermoed dat je het hebt over de totale telling van het aantal leestekens? De functie die de uitkomst opsplitst in losse woorden doet het m.i. goed: 'dikke mik' bestaat uit twee woorden van resp. 5 en 3 letters. Dus de uitkomst "5,3" klopt. De eerste 'meting' met '9' als uitkomst klopt natuurlijk óók, want ik vermoed dat je in dát veld alleen de lengte van het veld telt. En dan neem je dus óók de spaties mee. Wil je géén spaties tellen, dan moet je de spaties dus verwijderen uit de telling. Op de manier zoals je dat nu ook al doet met Replace.
Overigens beschouw ik afbeeldingen niet als 'database toevoegen'. Met plaatjes kan ik namelijk verder niet zoveel.
 
Beste Octafish

Ik ben aan het prutsen geweest ik kom er niet uit ik snap het niet.
Bij het formulier cryptogrammen staat "Dikke Mik" geeft 9 Aant_Let dat moet eigenlijk 5,3 zijn zoals u schrijft. In het 2e deel komt het er wel te staan.
En de letter ij moet als 1 letter gezien worden daar heeft u mij in het verleden mee geholpen dat werkt ook maar wel in het 2e gedeelte en niet in het eerste gedeelte dan wordt er 2 aant_let gegeven.
En dit verschijnsel doet zich ook voor in crypto woorden zoeken.
Zou u mij willen helpen?

Ik zal de database erbij doen.

Bij voorbaat vriendelijk dank.
 

Bijlagen

  • NieuweZip.zip
    40,3 KB · Weergaven: 13
Beste,

Pas volgende functie eens aan:

Code:
Function LenWoord(Woord As Variant) As Integer
Dim temp As String
    temp = Replace(Woord, "IJ", "\")
    temp = Replace(temp, "Ij", "\")
    temp = Replace(temp, "ij", "/")
    temp = Replace(temp, " ", "")
    LenWoord = Len(temp)
End Function

Let er op dat bij de eerste Replace je "Woord" als argument moet gebruiken.
Alle volgende Replace's moet je woord vervangen door temp, vermits het argument woord bij elke code gewijzigd wordt.

De functie in het formulier Cryptogrammen was ook verkeerd gespeld... maar ik vermoed dat dat om een gewone vergissing gaat. Moet zijn:

=IIf([woord] Is Null;"";LenWoord([Woord]))

Bij mij was het niet nodig om alle variaties van ij afzonderlijk te typen. 't Is niet hoofdlettergevoelig. Maar goed, wie weet elders wel.

Succes,
Luc
 
Beste,

Ik heb u raad opgevolgd maar zie nog steeds de zelfde resultaten
Wat ik niet weet waar ik dit =IIf([woord] Is Null;"";LenWoord([Woord])) moet neer zetten.
Ik heb hier boven ook foto's geplaatst en omcirkeld wat niet goed gaat.

Vriendelijke groet.
 
Veel te lange functie :)
Code:
Function LenWoord(Woord As Variant) As Integer
    LenWoord = Len(Replace(Replace(LCase(Woord), "ij", "|"), " ", ""))
End Function
 
In de programmacode van het Forumulier Cryptogrammen moet je nu in de strSQL string ook de juiste functie zetten.
Dus Len wordt LenWoord

Code:
Private Sub fltrCryptogrammen_Change()
Dim sFltr As String
    sFltr = Me.fltrcryptogrammen.Text
    strSQL = "SELECT Omschrijving, Woord, LenWoord([Woord])AS Aant_Let, Datum, Tijd FROM Cryptogrammen " _
        & "WHERE (Omschrijving Like """ & Me.fltrcryptogrammen.Text & "*"");"
    
    With Me
        .lstOmschrijving.RowSource = strSQL
        .lstOmschrijving.Requery
    End With
    Me.fltrcryptogrammen.SelStart = Len(sFltr)
        
End Sub
 
Beste,

Het aantal letters worden nu wel goed geteld maar nog niet goed weergegeven.
'Dikke Mik" is nu 8 maar zou als 5,3 weergegeven moeten worden.
En de letter ij wordt nu weergeven als 1 dus BIJL is 3 dat is prachtig.
ik doe er even een foto bij.

Vriendelijke groet
 

Bijlagen

  • 4.png
    4.png
    117,4 KB · Weergaven: 25
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan