Ett problem. Ett dos program har sparat värde i en fil. Jag försöker nu Hej Hej Sven! > finns tecknet | med i textfilen ? Om det står: > Där 10 12 34 56 78 90 00 00 00 > Verkar det snarare vara en decimal fil. Filen kan vara så stor eller liten jag vill! Jag tillverkar den själv i ett dos program. Problemet är att i det gammla språk som används lagras värdena som flyttal och mitt problem är att jag vill kunna läsa in den i VB miljö. När jag tittar i den med en hexeditor så får jag fram de tecken Aha, flyttal... jag trodde det var heltal. Har inte i huvudet hur flyttal är uppbyggda, men en double är väl åtta bytes och det är förmodligen det han har lagrat. Hej så här blev min lösningOmvandla tal i fil
läsa in och tyda dessa data. I min hexeditor ser filen ut enligt nedan:
00 10 00 00 ¦ 00 00 00 00 ¦ 00 20 00 00 ¦ 00 00 00 00
00 30 00 00 ¦ 00 00 00 00 ¦ 00 40 00 00 ¦ 00 00 00 00
00 50 00 00 ¦ 00 00 00 00 ¦ 00 60 00 00 ¦ 00 00 00 00
00 70 00 00 ¦ 00 00 00 00 ¦ 00 80 00 00 ¦ 00 00 00 00
Där 00 10 00 00 ¦ 00 00 00 00 skall vara talet 1,
00 20 00 00 ¦ 00 00 00 00 skall vara talet 2 osv.
och (ej med på ovanstående)
10 12 34 56 │ 78 90 00 00
skall vara talet 123456789
Jag kan inte komma på hur läsa in det i VB. Dvs läsa in i sträng går ju
men på något sätt läses inte från början och omvandligen har jag också problem med. Har provat med Hex etc utan någon lycka.
Någon som har några ideer?
M.V.H.
Bo JohanssonSv: Omvandla tal i fil
>och (ej med på ovanstående)
>10 12 34 56 │ 78 90 00 00
>skall vara talet 123456789
Sånt här tycker jag är intressant men jag förstår inte ovanstående.
00 10 00 00 ¦ 00 00 00 00 skall detta verkligen bli 1.
finns tecknet | med i textfilen ?
kom igen så fixar vi detta.
mvh
SvenSv: Omvandla tal i fil
Tack för dit intresse!
Det logger lagrat:
10 12 34 56 78 90 00 00 00 02 11 00 00 00 00 00 00 00
och så vidare.
Där
10 12 34 56 78 90 00 00 00
tlet skall vara 123456789.
och
02 11 00 00 00 00 00 00 00
där talet skall vara 11
Jag anta att de första två på något sätt talar om hur många siffror
som är lagrade.
BoSv: Omvandla tal i fil
Det är nog ingen textfil, utan snarare en binärfil.Sv: Omvandla tal i fil
10 12 34 56 78 90 00 00 00 02 11 00 00 00 00 00 00 00
och så vidare.
Där
10 12 34 56 78 90 00 00 00
tlet skall vara 123456789.
och
02 11 00 00 00 00 00 00 00
Verkar det snarare vara en decimal fil. Annars har du inte 0-9. Brukar
annars använda octa eller hexadecimala - men 8 och 9 finns med så
octa är uteslutet, på samma sätt finns varken någon av bokstäverna
A till F med... så det verkar inte vara hexadecimalt...
//EmmaSv: Omvandla tal i fil
> tlet skall vara 123456789.
Nu hänger jag inte riktigt med. Om du lagrar talet 123456789 så blir det ju 15 CD 5B 07 när du tittar på det i en hexeditor.
Hur stor är filen? Vad är det för sorts fil? =Vet= du vad den har för innehåll?Sv: Omvandla tal i fil
En fil kan inte vara decimal. Den kan inte vara oktal eller hexadecimal heller för den delen. En fil består alltid bara av ettor och nollor. Dessa kan sedan visas på olika sätt beroende på vilket program man tittar på dem i.Sv: Omvandla tal i fil
som jag beskrivit. Antagligen är det de första tecknen som på något sätt
beskriver innehållet i posten. Där kan finnas ett hexvärde tex 0C alltså
12 och det finns mycket riktigt 12 tecken i posten, men decimaler framgår inte!
Något att bita i!
BoSv: Omvandla tal i fil
Men jag tror det är enklare om jag undersöker filen. Ta och spara följande värden i den: 64 512 4096 och 16384 och skicka den sedan till tt@tydal.nuSv: Omvandla tal i fil
Option Explicit
Dim SplitArray() As String
Dim ByteArray(7) As Byte
Dim TestStr As String
Private Sub Form_Load()
Dim i As Long
'Här lägger man in test strängen. 8 byte åt gången
exempel:
' "04 12 35 60 00 00 00 00"
' "06 12 34 56 00 00 00 00"
' "08 12 34 56 70 00 00 00"
' "04 12 35 67 00 00 00 00"
' "FE 01 12 34 00 00 00 00"
TestStr = "08 12 34 56 70 00 00 00"
SplitArray = Split(TestStr)
For i = 0 To 7
ByteArray(i) = Val("&H" & SplitArray(i))
Next 'i
End Sub
Private Sub Command1_Click()
Dim ret As Double
ret = OmVal
Label1.Caption = CStr(OmVal)
End Sub
Private Function OmVal() As Double
Dim ManStr As String
Dim EXPStr As String
Dim i As Long
ManStr = ""
For i = 0 To 6
ManStr = ManStr & Left$(Hex$(ByteArray(i + 1) And 240), 1) _
& Hex$(Hex$(ByteArray(i + 1) And 15))
Next 'i
ManStr = Left$(ManStr, 1) & "." & Mid$(ManStr, 2, Len(ManStr))
If (ByteArray(0) And 128) = 128 Then
EXPStr = "-" & Hex$((((ByteArray(0) And 254) Xor 254) + 1) / 2)
Else
EXPStr = CStr((ByteArray(0) And 254) / 2)
End If
OmVal = Val(ManStr & "E" & EXPStr)
End Function
mvh
Sven