Har hittat ett ex här på pellesoft, för att formatera telenr. Det fungerar så länge inte Stockholmsnr ska skrivas in, kanske jag är på fel spår men har inte förstått var jag missar. >Dim TTemp, TTemp1, TTemp2, TTemp3, TTemp4, TTemp5, strTTemp, MyPos As String Så här får det bli pga "nollor" på slutet Tackar... Finns lite finjusteringar kvar.Det är inte snyggt när det slutar på ett singeltal. Alltid roligt att "dribbla" med ASCII tecken. Man kan göra mycket trix med dem ! Detta "förhållande" kan säkert komma till användning framöver. Anar din bitska kommentar :-;. Men alltså Sven... Oki Christer Hej! En annan kul sak som många inte tänker på är att man kan konvertera en Char till en Int (om char är en siffra) genom att ta Håkan, har provat ditt alternativ det är samma resultat som blir med S - Å. Jag förstår nog inte din lösning? Håkan Hej! <b>Sven J: Då förstår jag, >Tex. är det klart för dig mfl.. att det alltid skilljer 32 mellan stora och små (versaler , gemena) Nu är det ju ett VB forum vi resonerar kring. ABC80 har jag skickat till sophögen. Jaaaa du Sven J. Som vanligt krånglar man till det i onödan. Sven.Mid
'Skriv in riktnr tryck på mellanslag skriv in resten av nr.
Private Sub txtTelefon_LostFocus()
Dim TTemp, TTemp1, TTemp2, TTemp3, TTemp4, TTemp5, strTTemp, MyPos As String
' Vet ej om strTTemp ska vara String ?
'Dim strTTemp ' Ingen skillnad om jag bara Dim den?
'Kollar om tel.nr redan finns angivet
If Len(txtTelefon.Text) > 0 Then
MyPos = InStr(1, txtTelefon, "-")
If MyPos <> 0 Then
Exit Sub
Else
On Error Resume Next
TTemp = Telefon
TTemp = Split(TTemp, " ")
TTemp(0) = TTemp(0) & " - "
Error.Clear
If Len(TTemp(1)) = 5 Then
TTemp1 = Mid(TTemp(1), 1, 3)
TTemp2 = Mid(TTemp(1), 4, 2)
strTTemp = TTemp(0) & TTemp1 & " " & TTemp2
ElseIf Len(TTemp(1)) = 6 Then
TTemp1 = Mid(TTemp(1), 1, 2)
TTemp2 = Mid(TTemp(1), 3, 2)
TTemp3 = Mid(TTemp(1), 5, 2)
strTTemp = TTemp(0) & TTemp1 & " " & TTemp2 & " " & TTemp3
ElseIf Len(TTemp(1)) = 7 Then
TTemp1 = Mid(TTemp(1), 1, 3)
TTemp2 = Mid(TTemp(1), 4, 2)
TTemp3 = Mid(TTemp(1), 6, 2)
strTTemp = TTemp(0) & TTemp1 & " " & TTemp2 & " " & TTemp3
'Här nedan har jag försökt göra så att det går att lägga in Stockholmsnr.
'Det som inte fungerar är vissa telnr: ex: 08 - 550 313 30 det blir 08 - 550 133 30
'
ElseIf Len(TTemp(1)) = 8 Then
TTemp1 = Mid(TTemp(1), 1, 3)
TTemp2 = Mid(TTemp(1), 5, 3)
TTemp3 = Mid(TTemp(1), 7, 2)
strTTemp = TTemp(0) & TTemp1 & " " & TTemp2 & " " & TTemp3
End If
End If
End If
txtTelefon.Text = strTTemp
End Sub
/SJ :-(Sv: Mid
Detta är ju helt galet,det enda som blir String skall inte vara det, Mypos skall vara Long
<code>
Dim TTemp As String, TTemp1 As String
Dim TTemp2 As String, TTemp3 As String
Dim TTemp4 As String, TTemp5 As String
Dim strTTemp As String, MyPos As Long
</code>
Dvs du måste deklarera varje variabel ,nu var det bara MyPos som blev String som var fel ;-)
Dom andra blev Variant , vilket är en styggelse men Ok skulle funka.
Sen skall du använda Mid som String dvs ex.
<code>
TTemp1 = Mid$(TTemp1, 1, 3)
</code>
Finns det en Array TTemp(5) ? om inte kan du inte skriva TTemp(1) skall vara TTemp1 osv.
Mao en djä.. soppa konstigt att du får ut något alls ;-)
Jag skall skriva om hela din kod med hopp att du lär dig något.Sv: Mid
Surt att det inte gick att lösa med Format$
<code>
Option Explicit
Private Sub txtTelefon_LostFocus()
'Texten måste innehålla >= 6 tecken varav "-" skall vara ett.
If Len(txtTelefon.Text) > 6 Then
If InStr(txtTelefon.Text, "-") Then _
txtTelefon.Text = ConvertInNr(txtTelefon.Text)
End If
End Sub
Private Function ConvertInNr(ByVal nummer As String) As String
Dim ord1 As String, ord2 As String, ord3 As String
Dim pos As Long, i As Long
nummer = Replace(nummer, Chr$(32), "") 'ta bort onödiga mellanslag
pos = InStr(nummer, "-")
ord1 = Left$(nummer, pos - 1) & " -"
ord2 = Right$(nummer, Len(nummer) - pos)
ord3 = Left$(ord2, 3) & " "
For i = 4 To Len(ord2)
ord3 = ord3 & Mid$(ord2, i, 1)
If i Mod 3 = 0 Then ord3 = ord3 & " "
Next 'i
ConvertInNr = ord1 & " " & ord3
End Function
</code>Sv:Mid
Ska prova och se.
SJ
Det var skillnad!
Nu har jag provat och det är som det ska om det är XX-XXX XXX XX.
Får prova mig fram.
SJ :-)Sv: Mid
xxx-xxx xxx x
Borde vara
***- *** ** **
DSSv:Mid
Tex. är det klart för dig mfl.. att det alltid skilljer 32 mellan stora och små (versaler , gemena)
Dvs stora "A" är 65 . Lilla "a" är 65 + 32. Så kan du alltid omvandla.
Sen kommer besserwissernissarna och säger att det inte stämmer UNICODE , skratt :-)
Jag kan sedan skriva detta som Bitvis operationer. (And Or)
Det gör mig alltid så besviken att Ni aldrig tar åt Er gamla erfarenheter.
Ni har en djä.. förmåga att krångla till det som Vi kom på redan på 50 talet och innan det !Sv: Mid
Visa gärna på fler inbyggda finesser som du hittat betr. ASCII-tecken.
ChristerGbgSv:Mid
Det skiter jag i. Bitvis operationer är Guld och kan hjälpa många "troll" att se ljuset.
OCH OCH observera att detta är nybörjarforumet,
så vill du avancera så "please" gör det i ett annat Forum.
Fö fattar jag inte varför Ni sk. experter läser i detta Forum ?
"A" + 32 = "a" Så var budskapet ;-)
Ps
Jag skiter i Jantelagen
DSSv: Mid
Detta var alls ingen "bitsk kommentar" utan ett försök
att mötas på ett mer konstruktivt "plan" från min sida.
F´låt om jag inte var tillräckligt tydlig i min formulering.
Jag har aldrig sett mej själv som något annat än en
amatör och nybörjare då det gäller programmering.
Vi kan slänga käft då det gäller andra områden, men
då det gäller data och programmering så kommer jag
alltid att "suga åt mej som en svamp" av det du vill
förmedla och lära ut.
Budskapet har gått fram, och jag ser fram emot mer
av den "varan", helt ärligt och uppriktigt.
ChristerGbg
PS
Då det gäller Jantelagen är vi helt överens.
DS
Sv:Mid
Bara för att förmdla vad jag menar i ett NybörjarForum.
Man lär sig UCase och LCase.
I ASCII tabellen är 87 "W" gemena(lilla w) är 87 + 32 = 119 (Dom heter Versaler och Gemena)
mycket enklare att få fram än att kalla på "knäppa" funktioner UCase LCase
Dom har ett logiskt sammband i Bitvis operationer.Sv:Mid
Sven: En alternativ lösning..
Private Function ConvertInNr(ByVal nummer As String) As String
Dim riktnr As String, telnr As String
riktnr = Left$(nummer, InStr(nummer, "-") - 1) & " - "
telnr = Mid$(nummer, InStr(nummer, "-") + 1)
ConvertInNr = Replace(riktnr & IIf(Len(telnr) = 7 Or Len(telnr) = 10,
Format$(telnr, "### ### ## ##"),
StrReverse(Format$(StrReverse(telnr), "###,###"))), " ", " ")
End Function
Sv:Mid
myChar - Char(0)
Exempel:
<code>
Dim myChar As Byte
myChar = 53
MsgBox Chr(myChar) 'Dessa båda
MsgBox myChar - Asc(0) 'rader ger samma
</code>
eller i C där detta typ är enda/lättaste sättet att lösa detta på
<code>
myChar - '0'
</code>
/AndrecSv: Mid
Fortsätter att prova mig fram.
SJ :-)
Håkan. 05-01-20
Då förstår jag, det jag är ute efter var att telnr ska formateras efter hur oberoende många siffror det är. Samma system som man läser i telefonkatalogen.
---
Håkan Kl.16:45
HAr kopierat lite nummer från katalog:
Det kanske inte går på något smidigt sätt, ja jag är inte så klipsk att få till det, vet bara hur jag vill ha det!
0521-162 20
08-550 162 35
08-669 06 90
08-26 00 75
08-97 04 10
08-556 134 00
08-745 31 25
08-669 06 90
0771-77 78 88
070-647 58 58
0293-141 41Sv:Mid
ConvertInNr = Replace(riktnr & IIf(Len(telnr) = 7 Or Len(telnr) = 10,
Format$(telnr, "### ### ## ##"),
StrReverse(Format$(StrReverse(telnr), "###,###"))), " ", " ")
Det var smart löst , precis vad jag letade efter men inte fick till.Sv:Mid
Är det inte så som du vill ha det?
Det går att ändra.
Ha antagligen inte förstått hur du vill formatera i så fall.
Lösningen jag gjorde gör samma som SvenPons gör.
Det var bara en alternativ lösning på samma problem.
Hade inget att göra.
Blev nyfiken på om man på någor sätt skulle kunna använda Format$(),
som SvenPon "efterlyste".
//HåkanSv:Mid
det jag är ute efter var att telnr ska formateras efter hur oberoende många siffror det är.
Samma system som man läser i telefonkatalogen.
</b>
Funktionen bygger på att det finns ett "-" (som SvenPon förutsatte i sin lösning).
Sen formaterar den upp till 12 siffror efter "-".
Mig veterligen finns det inte nummer med så mycket siffror efter "-" (riktnummer).
Detta går att bygga ut.
Hur formateras nummer i katalogen (för lat att se efter)?
//HåkanSv: Mid
Alltid är väl lite att ta i. Det gäller ju för bokstäver som finns med i ASCII men det enda fall där "åke" blir "ÅKE" med din metod är väl med svensk 7 bitars ascii som användes i ABC80 och på matrisskrivare.Sv:Mid
Jag utgår från VB :s ANSI Charter Set.
"Åke" blir Chr$(229 - 32) & "k" & "e"Sv:Mid
Den formateringen kan man inte fundera över.
Vid görsta anblicken (trött...zz) ser jag inte att det finns någon "regel" de grupperar efter "-".
Men nu tror jag att jag vet hur de tänker (eller så drömmer jag... :-) ).
Tydligen ska det inte vara mellanslag runt "-" heller.
Återkommer, om jag inte somnar.
//HåkanSv: Mid
Så här blir min slutlösning enkelt och rakt på.
<code>
Option Explicit
Private Sub txtTelefon_LostFocus()
'Texten måste innehålla >= 6 tecken varav "-" skall vara ett.
If Len(txtTelefon.Text) > 6 Then
If InStr(txtTelefon.Text, "-") Then _
txtTelefon.Text = ConvertInNr(txtTelefon.Text)
End If
End Sub
Private Function ConvertInNr(ByVal nummer As String) As String
Dim Rnr As String, Telnr As String
Dim pos As Long, i As Long
nummer = Replace(nummer, Chr$(32), "") 'ta bort onödiga mellanslag
pos = InStr(nummer, "-")
Rnr = Left$(nummer, pos - 1) & "-"
Telnr = Right$(nummer, Len(nummer) - pos)
Select Case Len(Telnr)
Case Is = 5
Telnr = Format$(Telnr, "### ##")
Case Is = 6
Telnr = Format$(Telnr, "### ###")
Case Is = 7
Telnr = Format$(Telnr, "### ## ##")
Case Is = 8
Telnr = Format$(Telnr, "### ### ##")
Case Is = 9
Telnr = Format$(Telnr, "### ### ###")
Case Is = 10
Telnr = Format$(Telnr, "### ### ## ##")
End Select
ConvertInNr = Rnr & Telnr
End Function
</code>Sv:Mid
Tack som vanligt bra. Var lite på det spåret men fick inte till det.
Upplysningsvis fick jag bara ändra på:
Case Is = 6
Telnr = Format$(Telnr, "## ## ##")
så att det visar som jag anser att det ska vara.
SJ :-))