Avatar billede dennisa Nybegynder
04. maj 2004 - 08:16 Der er 25 kommentarer og
2 løsninger

Oversættelse fra alfanummerisk til nummerisk via ASCII

Denne er med garanti nem, men jeg er kørt lidt sur i koden.

Jeg har behov for at få defineret en programkode, som omsætter eksempel PE til talværdien 80069. Det ekstra nul i midten er en fast værdi, som benyttes til at adskille de to bogstaver.

Koden skal kunne tage højde for, at der ikke altid er to bogstaver, men i nogen tilfælde kun et. I sådanne tilfælde skal eksempelvis P returteres som 80000.

Er det helt sort snak ?
Avatar billede jensen363 Forsker
04. maj 2004 - 08:20 #1
Jeg mener, at koden til oversættelse af en ascii-værdi er noget i retning af ASC()
Avatar billede jensen363 Forsker
04. maj 2004 - 08:37 #2
Dette skulle virke i en forespørgsel :

Asc(Mid([AlfaVærdi];1;1)) & 0 &
IIf(Mid([AlfaVærdi];2;1)="";"00";Asc(Mid([AlfaVærdi];2;1)))
04. maj 2004 - 09:17 #3
Eller i VBA:
Public Function Konverter(ByVal Kode As String) As Long
    Dim tmp As String
    tmp = Asc(Mid(Kode, 1, 1)) & 0
    If Mid(Kode, 2, 1) = "" Then
        Kode = tmp & "00"
    Else
        tmp = tmp & Asc(Mid(Kode, 2, 1))
    End If
    Konverter = Val(tmp)
End Function

Brug den således:
A = Konverter("PE")
Avatar billede dennisa Nybegynder
04. maj 2004 - 09:24 #4
Begge løsninger virker. Tak :o)
Avatar billede jensen363 Forsker
04. maj 2004 - 09:31 #5
Hej Thomas.

Hvor meget har du mistet ved weekendens serveromlægning ?

Dennis > Tak for point
Avatar billede dennisa Nybegynder
04. maj 2004 - 09:42 #6
Som jeg sagde, det virker men jeg havde ikke forudset, at konverteringer kunne udløse mere en 5 cifre. Håber I vil hjælpe mig færdig med koden alligevel.

Kriterierne er følgende :

Hvis der er mere end 5 cifre, skal den tredie fjernes, altså værdien 0. I de tilfælde hvor der er 7 cifre ( eksempelvis gf ) skal også den første ciffer fjernes.

Giver det mening ?
04. maj 2004 - 09:44 #7
Jensen->jeg tror, at jeg har tabt 3-5.000 point (jeg kan ikke helt huske hvormeget jeg havde før). Og så røg jeg 2 pladser ned i den samlede stilling :o(
Jeg har været ret aktiv de sidste par uger, og en masse Visual Basic- og Office-spm til 1-200 point er forsvundet :o(

Hvad med dig selv?
04. maj 2004 - 09:45 #8
Dennisa->Nu ved jeg ikke hvad du bruger koden til, men du kunne overveje, at benytte hexadecimale koder i stedet for alm. decimale tal?
Avatar billede jensen363 Forsker
04. maj 2004 - 09:47 #9
Jeg var faktisk ved at bevæge mig ind på Top 10 ( i Access ), mistede vel en 1100-1200 point ...;(
04. maj 2004 - 09:50 #10
Dennisa->
Public Function Konverter(ByVal Kode As String) As Long
    Dim tmp As String
    tmp = Left(Asc(Mid(Kode, 1, 1)), 3)
    If Mid(Kode, 2, 1) = "" Then
        Kode = tmp & "00"
    Else
        tmp = tmp & Asc(Mid(Kode, 2, 1))
    End If
    Konverter = Val(tmp)
End Function


Jensen-> Ja, det er noget L... ! :o(
04. maj 2004 - 09:55 #11
Jensen->Jeg må skuffe dig med, at du mangler 3557 point for at komme på top 10 (forudsat at andre ikke når det inden).

Kig her: http://www.eksperten.dk/pointstat.phtml?sort=&order=DESC&start=40&catid=33&date_year=0&date_month=0&date_day=0

Det er jo kun de point, som er optjent i Access, som tæller med i Access-To 10-listen :o(
Avatar billede jensen363 Forsker
04. maj 2004 - 09:59 #12
Thomas > Ok, jeg troede umiddelbart at det var den samlede point score ... men alligevel, var jeg godt på vej ... ( har selv været ret aktiv på det seneste ) ;)
04. maj 2004 - 10:04 #13
Jeg lavede samme fejl, da jeg i sin tid troede at jeg var klar til en 9-10. plads. Jeg skrev direkte til Eksperten og brokkede mig og truede med død og ødelæggelse, hvis de ikke fik rettet "fejlen" - de svarede mig aldrig tilbage - de har nok tænkt: "sikke en tosse!" ;o)
04. maj 2004 - 10:08 #14
Dennisa->Virkede mit sidste forslag?
Avatar billede dennisa Nybegynder
04. maj 2004 - 10:09 #15
Thomas > din kode ( den første ) virker ikke. I de tilfælde hvor der kun er et bogstav, returneres kun tre cifre, altså ikke de sidste nuller.

Resultatet skal indgå i en IK-kodelinie, hvor antallet af cifre ikke må overstige et bestemt antal
04. maj 2004 - 10:26 #16
nå ja, jeg havde lavet en skrivefejl :o( Denne skulle være bedre:

Public Function Konverter(ByVal Kode As String) As Long
    Dim tmp As String
    tmp = Left(Asc(Mid(Kode, 1, 1)), 3)
    If Mid(Kode, 2, 1) = "" Then
        tmp = tmp & "00"
    Else
        tmp = tmp & Asc(Mid(Kode, 2, 1))
    End If
    Konverter = Val(tmp)
End Function
Avatar billede dennisa Nybegynder
04. maj 2004 - 10:34 #17
Det blev det slet ikke bedre af. Nu fjernes den miderste, altså 0 i alle tilfælde, ikke kun dem hvor der er mere end 5 cifre. Og funktionaliteten ved 7 cifre virker ikke ( gf returneres som 103102, og ikke 03102 )

Jensen > har du en løsning ?
04. maj 2004 - 10:43 #18
jamen, gf GIVER jo 103102
Hvis du bare skærer noget af, så kan du jo ikke bruge koden til noget!

både g og f har 3-cifrede ascii-kode.

Jeg kan sagtens skære cifre af, men er det virklig det, du vil?
Avatar billede dennisa Nybegynder
04. maj 2004 - 10:46 #19
Jeg forstår dit spørgsmål, har selv rejst problematikken i forhold til validiteten af resultatet, men det er åbentbart det som vi vil :o)
04. maj 2004 - 10:50 #20
ok lad mig lige kigge på det :o)
04. maj 2004 - 11:23 #21
Prøv denne:

Public Function Konverter(ByVal Kode As String) As String
    Dim tmp As String
    tmp = Left(Asc(Mid(Kode, 1, 1)) & "0", 3)
    If Mid(Kode, 2, 1) = "" Then
        tmp = Left(tmp & "000", 5)
    Else
        tmp = tmp & Asc(Mid(Kode, 2, 1))
    End If
    Konverter = Right(tmp, 5)
End Function

Konverter("op") giver altså 11112 i stedet for 111112, som den skulle.
Hvis I i stedet valgte at bruge Hex-tal, ville den hedde:
6F070 og alle oplysninger ville være der
Avatar billede dennisa Nybegynder
04. maj 2004 - 11:38 #22
Det virker heller ikke.

Hvis der er 7 cifre, skal første og fjerde fjernes
Hvis der er 6 cifre, skal det tredie fjernes
Hvis der er 5 cifre, skal intet fjernes

Det ser umiddelbart ud til, at 5 og 7 ciffer-kriterierne går godt, men ikke 6, hvor eksempelvis Bd returneres som 60100 og ikke 66100.
Avatar billede jensen363 Forsker
04. maj 2004 - 11:48 #23
Sorry .... har lige været til møde, og desværre ikke haft mulighed for at deltage i den opgaveløsning ... men Thomas, du er vist godt på vej med en endelig løsning, så du følger den vel helt til dørs ;)
04. maj 2004 - 12:05 #24
hmm, man skal jo tænke her :o)

Jeg er startet forfra, da der var kommet for mange lapper på den anden løsning:

Public Function Konverter(ByVal Kode As String) As String
    Dim A As String, B As String
    A = Asc(Mid(Kode, 1, 1))
    If Len(Kode) = 1 Then
        Konverter = Left(A & "000", 5)
    Else
        B = Asc(Mid(Kode, 2, 1))
        Select Case True
            Case Len(A) + Len(B) = 4
                Konverter = A & "0" & B
            Case Len(A) + Len(B) = 5
                Konverter = A & B
            Case Len(A) + Len(B) = 6
                Konverter = Right(A, 2) & B
        End Select
    End If
End Function
Avatar billede dennisa Nybegynder
04. maj 2004 - 12:09 #25
Thomas > Perfekt løsning. Du fortjener flere point. Hvordan gør jeg det ?
04. maj 2004 - 12:16 #26
Det var da dejligt, at det endelig virkede :o)
Du behøver nu ikke give flere point, selvom det selvfølgelig varmer :o) Og hvis du mener det, så kan du kun gøre det ved at oprette nyt spm og skrive:

Point til Thomas Jepsen
og dette i beskrivelsen:
"Ref: http://www.eksperten.dk/spm/495580"
Avatar billede dennisa Nybegynder
04. maj 2004 - 12:21 #27
Løsningen blev også en anelse teknisk til sidst. Har oprettet et nyt spørgsmål :o)
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