VBAだとこんな感じ。固定長に切る
Const ForAppending = 8 Dim myFileSystem As New Scripting.FileSystemObject Dim mytextFileIn As Scripting.TextStream Dim mytextFileOut As Scripting.TextStream Dim buf As String buf = "" Set mytextFileOut = myFileSystem.OpenTextFile("c:\temp\sample.txt", ForAppending, TristateFalse) Set mytextFileIn = myFileSystem.OpenTextFile("c:\temp\FMKGNK01-01.txt", ForReading, TristateFalse) Do While mytextFileIn.AtEndOfStream <> True buf = buf + mytextFileIn.Read(1) 'ここで固定長分になるまで、1文字ずつ格納する。ああ、泥臭 If LenBA(buf) = 577 Then mytextFileOut.WriteLine (buf) buf = "" End If Loop mytextFileIn.Close mytextFileOut.Close
もう少し簡単な構文でと思ったが、この書き方だとデータが””で括られてしまうので没
あと、データの先頭が空文字だと無視しちゃうorz
Dim fileno As Integer Dim buf As String Dim buf2 As String Dim ii As Long Open "c:\temp\銀行テストデータ-本番抽出改行なし.txt" For Input As #1 Open "c:\temp\sample2.txt" For Output As #2 Do Until EOF(1) Input #1, buf For ii = 1 To Len(buf) buf2 = buf2 + Mid(buf, ii, 1) If LenBA(buf2) = 575 Then Write #2, buf2 + x0d buf2 = "" End If Next Loop
ここで、文字数ではなくて文字のバイト長を求める関数。
出典はここ
Public Function LenBA(ByVal strX As String) As Long 'ANSI 文字列でのバイト長を求める Dim strBA As String strBA = StrConv(strX, vbFromUnicode) LenBA = LenB(strBA) End Function