自分方位研究所

日々の活動記録

テキストファイルの文字列をアスキーコードに変換してみる(改行コードの確認)

UTF-8形式のテキストファイルを読み込んで、SHIFT-JIS形式に変換後、先頭から指定文字数だけ抜き出して、対応するASCIIコードを表示します。

出力先をイミディエイトウィンドゥだけにしておけば手間もかからなかったのですが、シートへの出力についての体裁を考えていたら、コードが増えてしまいました。

今回追加したプロシージャは

  • Sub 出力用シート整形
  • Sub テキスト分割文字コード表示

の二つです。今回のメイン処理は Sub テキスト分割文字コード表示 の
ch1 = Mid(tmpText, c, 1)
chAsc = Asc(ch1)
chHex = Hex(chAsc) 

の変換箇所だけで、あとは表示上の体裁を整える処理がほとんどです。

pkupChr = 200 '表示する文字数 

この値を変更することにより、出力する文字数を変えられます。

ただし、一文字ずつセルに書き込む方式なので、時間がかかります。とりあえずこの数値で実行してみてください。

Sub UTF8形式のテキストファイルの改行コード調査()

    Dim filePas As String
    filePas = ファイルパスを取得
    If filePas = "False" Then End

    Dim stCell As Range
    Set stCell = 出力開始セルを指定
    
    Dim pkupChr As Long
    pkupChr = 200   '表示する文字数
    Call 出力用シート整形(stCell, pkupChr)

    Dim tmpText As String
    tmpText = UTF8をSHIFTJIS化(filePas)

    Call テキスト分割文字コード表示(tmpText, stCell, pkupChr)

End Sub

'◆===================================================

Function ファイルパスを取得() As String

'ダイアログボックスを開いてファイルを選択する。
    
    ファイルパスを取得 = Application.GetOpenFilename( _
        FileFilter:="Text(*.txt),*.txt,CSV,*.csv,全部(*.*),*.*", _
        TITLE:="ファイルを選択")
        
    Debug.Print ファイルパスを取得
    
    'ファイル選択でフルパスファイル名。キャンセルすると「False」

End Function

'◆===================================================


Function 出力開始セルを指定() As Range

'アクティブなブックにワークシートを1つ右端に追加。

    Worksheets.Add after:=Sheets(Sheets.Count)
    Set 出力開始セルを指定 = ActiveSheet.Range("A1")


End Function

'◆===================================================

Sub 出力用シート整形(stCell As Range, pkupChr As Long)

'出力先セル設定
    'Dim pkupChr As Long
    'pkupChr = 200   '表示する文字数
    With stCell.Offset(0, 4)
        .ColumnWidth = 60
        .Font.Size = 9
        .Font.Name = "MS ゴシック"
    End With

    With stCell
        .Offset(2, 0) = "連番"
        .Offset(2, 1) = "文字"
        .Offset(2, 2) = "10進数"
        .Offset(2, 3) = "16進数"
        .Offset(1, 2) = "ASCIIコード"
        .Range(.Offset(1, 2), .Offset(1, 3)) _
            .HorizontalAlignment = xlCenterAcrossSelection
        .Range(.Offset(2, 3), .Offset(pkupChr + 2, 3)) _
            .HorizontalAlignment = xlRight
        .Range(.Offset(2, 1), .Offset(pkupChr + 2, 1)) _
            .HorizontalAlignment = xlCenter
    End With

End Sub

'◆===================================================

Function UTF8をSHIFTJIS化(filePas) As String

    Dim ADODBobj As Object
    Set ADODBobj = CreateObject("ADODB.Stream")
    
    With ADODBobj
        .Charset = "UTF-8" '"UTF-8" "SHIFT-JIS" '"UTF-8"
        .Open
        .LoadFromFile filePas
    End With
    
    UTF8をSHIFTJIS化 = ADODBobj.ReadText
    
    ADODBobj.Close

    Set ADODBobj = Nothing

End Function

'◆===================================================

Sub テキスト分割文字コード表示 _
(tmpText As String, stCell As Range, pkupChr As Long)

    
    stCell.Offset(0, 4) = Left(tmpText, pkupChr)

    Dim c As Long 
    Dim ch1 As String
    Dim chAsc As Integer
    Dim chHex As Variant

    For c = 1 To Len(tmpText)
        ch1 = Mid(tmpText, c, 1)
        chAsc = Asc(ch1)
        chHex = Hex(chAsc)
        
    With stCell
        .Offset(2 + c, 0) = c
        .Offset(2 + c, 1) = ch1
        .Offset(2 + c, 2) = chAsc
        .Offset(2 + c, 3) = chHex & " h"
    End With
        
        Debug.Print "c="; c, ch1, chAsc, chHex
        
        If c = pkupChr Then Exit For
    Next c

    With Cells
       .EntireColumn.AutoFit
       .EntireRow.AutoFit
    End With
    
End Sub

 

はてなブログの記事のエクスポートファイルを読み込ませてみると、改行コードが 10 (16進数で A)(LF) であることがわかります。

Excel では LFは、セル内改行に使用されています。

この、改行コードが入っているセルは、文字が表示されていませんが、セル内で改行されていますので、セルの高さが2行分になっています。

ほとんどコメントを入れておらず、見づらくて申し訳ありません。