04. maj 2004 - 08:16Der 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.
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
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.
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(
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
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 ) ;)
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)
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
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 )
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
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 ;)
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
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:
Løsningen blev også en anelse teknisk til sidst. Har oprettet et nyt spørgsmål :o)
Synes godt om
Ny brugerNybegynder
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.