UTF8のCRLFをLFに変換するときにハマった件
お元気ですか?ご無沙汰しています。相変わらず耳鳴り続いていますが、何とかやっています。高音領域がやはりなかなか戻りません。ほんの少しですがピピっというかなり高い音がやや聞こえるようになってきています。後2か月でもう1年か~。
ところで、Access2007でdocmd transfertextをUTF8で吐き出したファイルの改行コードはCRLFになっています。システムにアップするときにLFでないとダメなので、さらにAccess2007のvbaで取り込んでCRLF→LF変換をしていました。
小さいファイルでは問題なく下記Replaceが動いていました。
Private Function replace_line_separator( _
strTxt As String, _
LineSeparator As LineSeparatorEnum _
) As String
Dim tmpRet As String
Dim strLS As String
Select Case LineSeparator
Case adCRLF: strLS = vbCrLf
Case adLF: strLS = vbLf
Case adCR: strLS = vbCr
End Select
tmpRet = Replace(strTxt, vbNewLine, strLS)
tmpRet = Replace(tmpRet, vbLf, strLS)
tmpRet = Replace(tmpRet, vbCr, strLS)
replace_line_separator = tmpRet
End Function
上記はネットで拾ったコードです。検索すれば出てくるかもしれません。
このコードで初めて
「文字列領域が不足しています」errorcode14
が出ました。
いつもと違うのは、ややファイルが大きいことでした(といってもいつも400~500行くらいの今回は3倍程度で1500行程度)。
以下のようにReplaceで
tmpRet = Replace(strTxt, vbNewLine, strLS, , , vbBinaryCompare)
tmpRet = Replace(tmpRet, vbLf, strLS, , , vbBinaryCompare)
tmpRet = Replace(tmpRet, vbCr, strLS, , , vbBinaryCompare)
と比較モードを指定することで回避できました。
誰かの役に立てば幸いです。
ただ、なぜこれで回避できたかはよく分かりませんf(^^;