• 2

[請教]VB如何用byte範圍傳回字元

不好意思,小弟是初學者..如果有打錯,請見諒~

我把資料po上來,用UltraEdit開啟 ,其中兩筆

這跟我原po的資料類似,只是位置不同

第一筆

00000000h: AB A2 A7 51 AA 69 AF 53 20 20 20 20 20 20 20 20 ; 哈利波特
00000010h: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ;
00000020h: 20 20 20 20 20 20 20 20 AD 5E A4 E5 AA A9 20 20 ; 英文版
00000030h: 20 20 20 20 20 20 20 20 33 32 30 32 30 34 ; 320204



第二筆

00000000h: A5 78 C6 57 A1 49 A4 48 B1 A1 A8 FD 20 20 20 20 ; 台灣!人情味
00000010h: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ;
00000020h: 20 20 20 20 20 20 20 20 A4 A4 A4 E5 20 20 20 20 ; 中文
00000030h: 20 20 20 20 20 20 20 20 33 32 30 32 30 35 ; 320205


像是這樣的資料,我用記事本開啟時

書名 到 語言 到 書號 中間會有空格
但是用vb讀進去號,是書名接語言接書號沒有空格,用msgbox會出現"哈利波特英文版320204"
怎麼抓出 書名,語言,書號
謝謝了!
我傳上來的格式好像跑掉了
我po圖片好了

VB6
讀取檔案至陣列,這(應該)很簡單不多說
b(9) <- 假設這是放資料的10個byte
逐行檢查b(0)~b(9)是否<128 (十六進位&h80)
若<128則做單byte字
若>=128則與下一個位元組合做雙byte字
若=0直接跳出迴圈

if b(j) = 0 then
 exit do '這邊看你外層迴圈是用do還是其他的
elseif b(j) < 128 then
 s = s & Chr(b(j))
else
 s = s & Chr(b(j) + 256*CInt(b(j)) )
end if

大概像這樣吧
可能要改用ChrW, 看你的原始格式是怎麼存的


要不也可以去網路上找模組, 有直接位元組陣列轉字串的
.Net更簡單
其實我把問題複雜化了...
看樓主後來提供的檔案內容, 沒有跳出字元, 用Type + Binary讀取即可
Private Type book
 name As String * 40
 edition As String * 16
 id As String * 6
End Type
 Dim myBook As book
 Open "C:\0.txt" For Binary As #1
  Get #1, , myBook
 Close #1
 Text1.Text = myBook.name
 Text2.Text = myBook.edition
 Text3.Text = myBook.id

要注意Trim對定長字串無效, 去空格函式要自己寫
你已經找的出來那些文字,應該就可以把那些文字指定到某一個變數去。

然後用Length去抓就好了,最後把抓出來的值丟到你要的位置去。


如果用 OPEN 去操作文字檔,當檔案很大時;速度也會變很慢或停滯
其實可以用 ADO 物件去操作,會更快而且有效率,程式也好管理
如下範例

Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim ConnStr As String

ConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=abc.txt;Extended Properties='text;FMT=Delimited;"
With conn
.Mode = adModeShareExclusive
.Open ConnStr
End With

Set rs.ActiveConnection = conn
With rs
.CursorLocation = adUseClient
.CursorType = adOpenKeyset
.LockType = adLockOptimistic
End With

關鍵在 ADO Connection String,只要成功連接就可以用資料庫方式操作

  • 2
內文搜尋
X
評分
評分
複製連結
Mobile01提醒您
您目前瀏覽的是行動版網頁
是否切換到電腦版網頁呢?