VB6.0用掲示板の過去のログ(No.1)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [過去ログ] [管理用]

投稿日: 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


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- Web Forum -