固定長textに全角文字(2バイト)が含まれている場合の取り出しで
        投稿者 魔界の仮面弁士  (社会人)
        
        投稿日時 
            2008/12/11 08:00:52
        
    
    
        固定長という事は、切り出すバイト位置も分かっているでしょうから、
いっそ、バイナリとして処理するのはどうでしょうか。
    
いっそ、バイナリとして処理するのはどうでしょうか。
Dim A1 As String    ' 0~ 4 の5バイト:12345 
Dim J1 As String    ' 5~11 の7バイト:あいアイウ 
Dim A2 As String    '12~14 の3バイト:678 
Dim J2 As String    '15~20 の6バイト:うえお 
Dim bytes() As Byte = My.Computer.FileSystem.ReadAllBytes("C:\text.txt")
Dim enc As Encoding = Encoding.Default
If UBound(bytes) >= 20 Then
    A1 = enc.GetString(bytes, 0, 4)
    J1 = enc.GetString(bytes, 5, 7)
    A2 = enc.GetString(bytes, 12, 3)
    J2 = enc.GetString(bytes, 15, 6)
End If
    
        投稿者 Fredee  (社会人)
        
        投稿日時 
            2008/12/11 17:41:31
        
    
    
        魔界の仮面弁士さん、ご教授有難う御座いました!!
具体的な記述のバイナリ処理説明で助かりました。
今回、バイナリ処理の方法を知ることが出来て感謝しています。
今後とも、宜しくお願い致します!
    
具体的な記述のバイナリ処理説明で助かりました。
今回、バイナリ処理の方法を知ることが出来て感謝しています。
今後とも、宜しくお願い致します!
        投稿者 魔界の仮面弁士  (社会人)
        
        投稿日時 
            2008/12/11 18:17:52
        
    
    
        一ヶ所修正。
    
 Dim A1 As String    ' 0~ 4 の5バイト:12345  
' 
' (中略) 
' 
'A1 = enc.GetString(bytes, 0, 4)   'これだと"1234"しか取れない。 
 A1 = enc.GetString(bytes, 0, 5)   'これなら"12345"が得られる。 
    
固定長テキストファイルに日本語(2バイト)文字が有ると、フィールドの指定が変わってしまいます。
例えば、C:\text.txt に
12345あいアイウ678うえお
のレコードがあって、12345 , あいアイウ , 678 , うえお を取り出すのに次のようにしています。
'----- ストリームリーダー定義 -----
Dim SrFile As StreamReader
Dim Sline As String
Dim A1 As String '12345 を格納 ← 問題なし
Dim J1 As String 'あいアイウ を格納 ← 全角と半角が混在すると以降の指定が変わります
Dim A2 As String '678 を格納したい ← 13桁目
Dim J2 As String 'うえお を格納したい ← 16桁目
SrFile = New StreamReader("C:\text.txt", Encoding.Default)
Sline = SrFile.ReadLine
While Not Sline Is Nothing
If Sline.Length <> 0 Then
A1 = Mid(Sline, 1, 5).ToString
J1 = Mid(Sline, 6, 5).ToString '全角半角が混在したり、半角だけ等で以降の指定が
A2 = Mid(Sline, 11, 3).ToString '変わります
J2 = Mid(Sline, 14, 3).ToString
End If
Sline = SrFile.ReadLine
End While
この時、J1の部分に半角だけの時や全角の文字数が変わった場合に、A2,J2の取り出し位置が変わります。
全角は2バイトで数えて、フィールドの指定カラムを変えないで数える方法はありますか?
Excel VBAではバイトで数える関数がありますが、VB.NETにはないのでしょうか!!
説明が十分でないかも知れませんが、何方かご教授をお願いします。