Avatar billede celal Nybegynder
11. januar 2006 - 09:25 Der er 2 kommentarer og
3 løsninger

opdel fornavn og efternavn i streng

jeg havde oprettet en spørgsmål http://www.eksperten.dk/spm/644687
men fik aldrig det rigtige svar.
jeg skal have opdelt navn i en streng til at indeholde 2 strenge med fornavn og efternavn.
eks.

navn ="Hans peter sørensen"
fornavn = "Hans peter"
Efternavn="Sørensen"

Det skal lige siges at jeg bruger access 97, så der er en begrænsning på hvilke funktioner jeg kan bruge.
Avatar billede sjap Praktikant
11. januar 2006 - 09:47 #1
Jeg bruger selv funktionen InStrReverse til denne opgave:

'----------------------------------------------------------------------------------------------------
'InStrReverse finder den sidste position af et tegn - i modsætning til Instr, der finder den første.
'Syntaksen er næsten identisk med InStr:
'
'    InStrReverse(string1, string2[, compare])
'
'    string1 Obligatorisk. Strengudtryk, der søges i.
'    string2 Obligatorisk. Strengudtryk, der søges efter.
'    compare Valgfrit. Angiver typen af strengsammenligning. Argumentet compare kan udelades, eller
'            det kan indeholde 0, 1 eller 2. Angiv 0 (standard) for at udføre en binær sammenligning.
'            Angiv 1 for at udføre en tekstsammenligning, der ikke skelner mellem små og store bog-
'            staver. Kun i forbindelse med Microsoft Access skal du angive 2 for at udføre en sammen-
'            ligning, der er baseret på oplysninger indeholdt i databasen. Hvis compare indeholder en
'            nulværdi, opstår der en fejl. Hvis compare udelades, bestemmes sammenligningstypen af
'            indstillingen Option Compare.
'----------------------------------------------------------------------------------------------------
Function InStrReverse(ByVal sTarget As String, ByVal sFind As String, ByVal iCompare As Long) As Long
Dim P As Long, LastP As Long, Start As Long

P = InStr(1, sTarget, sFind, iCompare)
Do While P
    LastP = P
    P = InStr(LastP + 1, sTarget, sFind, iCompare)
Loop
InStrReverse = LastP

End Function
Avatar billede sjap Praktikant
11. januar 2006 - 09:49 #2
Ved hjælp af ovenstående funktion kan du finde navnene:

Fornavn:
    Left(NewData, InStrReverse(navnetekststreng, " ", 1) - 1)

Efternavn
    Right(NewData, Len(NewData) - InStrReverse(NewData, " ", 1))
Avatar billede ffsoft Praktikant
11. januar 2006 - 11:57 #3
Peter Jensen
Ole Peter Jensen
Ole Mørch Jensen

Du bliver nødt til at checke dine data manuelt for at sikre
dig at du ikke har en person der hedder Ole Mørch til fornavn.
Avatar billede fynbohans Nybegynder
11. januar 2006 - 16:56 #4
Eller disse 2 funktioner:

Function Fornavn(Navn as STRING)
            DIM i AS Long
            DIM Posi AS LONG
            DIM a AS VARIANT

            FOR i = 1 TO LEN(Navn)
                  a = MID(Navn,i,1)
                  IF a = CHR(32) THEN Posi = i
            NEXT i
           
            Fornavn = MID(Navn,Posi-1)
End Function

Function Efternavn(Navn as STRING)
            DIM i AS Long
            DIM Posi AS LONG
            DIM a AS VARIANT

            FOR i = 1 TO LEN(Navn)
                  a = MID(Navn,i,1)
                  IF a = CHR(32) THEN Posi = i
            NEXT i
           
            Efternavn = MID(Navn,Posi+1)
End Function
Avatar billede mugs Novice
11. januar 2006 - 17:01 #5
Jeg bruger denne:

Dim MaxUd, FMax, K, i, intSpace As Integer
Dim strnavn As String
DoCmd.OpenForm "form1"
Me.Requery
MaxUd = DMax("[Tæller]", "Tabel1")
For K = 1 To MaxUd
strnavn = LTrim$(Me.[Navn])
FMax = Len(strnavn)
For i = 1 To FMax + 1
If Mid$(strnavn, i, 1) = " " Then Exit For
intSpace = i
Next i
Me.[Fornavn] = LTrim$(Mid$(strnavn, 1, intSpace))
Me.[Efternavn] = LTrim$(Mid$(strnavn, intSpace + 2, FMax))
DoCmd.GoToRecord acForm, "form1", acNext, 1
Next K
DoCmd.GoToRecord acForm, "form1", acPrevious, 1

Hvor Wolfgang Amadæus Mozart Hannibal Olsen opdeles med Wolfgang til fornavn.

Eller denne:

Dim Str, Str2, Pos As String
Str = Me.Navn
Pos = InStr(1, StrReverse(Str), " ", vbTextCompare)
If Pos = 0 Then
Me.Navn = Str
Else
Str2 = Right(Str, Pos - 1)
MsgBox Str2 & ", " & StrReverse(Mid(StrReverse(Str), Pos))
End If

som bliver til:

Olsen, Wolfgang Amadæus Mozart Hannibal i een tekststreng.

Nu skulle der vist være lidt at arbejde med.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester