投稿日 | : 2004/01/16(Fri) 14:04 |
投稿者 | : ak |
Eメール | : |
URL | : |
タイトル | : Re: 教えて下さい。 |
こんにちは。
サンプルでは256文字とってきていますが
1文字=1バイトではなく半角は1バイト、全角は2バイトです。
256文字中に全角が混じると256バイト以上になる為上手く
いかなかった訳です。
バイト数は
LenB(StrConv("文字列",vbFromUnicode))
で取得することができます。
参考までにサンプルを記述しておきます。
Public Sub Test()
Dim ii As Integer
Dim iFl As Integer
Dim lLen As Long
Dim lCutLen As Long
Dim sData As String
Dim sVal As String
Dim sTmp As String
Dim sTmp2 As String
'テストデータ作成
For ii = 1 To 26
If ii Mod 2 = 1 Then
sData = sData & String(255, Chr(64 + ii))
Else
sData = sData & StrConv(String(123, Chr(64 + ii)), vbWide)
End If
Next ii
sTmp = sData
'フリーファイル番号取得
iFl = FreeFile()
'ファイル出力処理
Open "C:\Test.txt" For Output As #iFl
Do Until Len(sTmp) = 0
sTmp2 = StrConv(sTmp, vbFromUnicode)
lLen = LenB(sTmp2)
If lLen > 256 Then
sVal = StrConv(LeftB$(sTmp2, 256), vbUnicode)
lCutLen = Len(sVal)
If Right$(sVal, 1) = vbNullChar Then
sVal = Left$(sVal, Len(sVal) - 1) & " "
lCutLen = lCutLen - 1
End If
Else
sVal = sTmp & Space$(256 - lLen)
lCutLen = Len(sTmp)
End If
sTmp = Right$(sTmp, Len(sTmp) - lCutLen)
Print #iFl, sVal
Loop
Close #iFl
End Sub