2008-04-28

Access 裡用 MID 切割中英文的問題


問題:


我在 ACCESS 裡面對一個文字檔用 MID 切割資料並且要存入 Table 中,但是這個文字檔是中英文混雜的,例如其中一行資料是

ABCDEFG中文描述1234567台灣BABYG股份有限公司EXAMPLE

我想要切割成:

ABCDEFG ==> 欄位一 ( 寬度 7 bytes )
中文描述 ==> 欄位二 ( 寬度 8 bytes )
1234567 ==>欄位三 ( 寬度 7 bytes )
台灣BABYG股份有限公司 ==> 欄位四 ( 寬度 21 bytes )
EXAMPLE ==> 欄位五

但是問題發生了,以 "台灣BABYG股份有限公司" 這個部份來看,因為中文字是 double bytes,所以它在文字檔的位置應該是在 23 (7 + 8 + 7 + 1),寬度 21,也就是說應該用 MID(23,21) 來切取,但實際切取的結果卻是 "BYG股份有限公司EXAMPLE",所以變成要用 MID(19.13) 才會正確。MID 函數似乎把 double bytes 的中文算成 single byte,讓我在讀取大量不規則中英文混合的資料上有很大的困擾,不知道有沒有什麼解決之道。

請求協助,謝謝!


回答:

首先必須確定文字檔內的資料欄位都是固定寬度,在使用傳統的 ASCII Code 時,英數字為 1 byte,中文為 2 bytes,但若使用 Unicode,中英文皆為 2 bytes。

在 VBA 程式裡是以 Unicode 處理字串,Mid 函數是以字元的角度來切割字串,不管字元是用 1 個或 2 個 byte 儲存,MidB 函數才是用 byte 來切割字串。

所以你的文字檔和程式的處理方式必須要配合,先弄清楚你的文字檔是用 ASCII Code 還是 Unicode 儲存,如果是 ASCII Code,在讀入整列資料後,要用MidB 函數來切割欄位。

沒有留言: