|
▼ISO さん:
>TXTデータで文章の最後は改行はされていますので
>「有」となるべきとこが「無」となってしまいます。
いま以下のようなTAB区切りテキストファイルがあったとします。
001◆abc↓
002◆34500↓
001◆990101↓
(ここで、
◆はTABコード;↓は改行コード を表します)
ファイル名が 990101.txtだとすると、
このテキストのばあいは、テキストの最後に改行があるので、
最初のReplace案のように
> ss = vbTab & Replace(StrConv(buf, vbUnicode), vbCrLf,vbTab)
により、改行コード(↓)をTABコード◆に変換した文字列
"◆001◆abc◆002◆34500◆001◆990101◆"
~~~~~~~~~~
のなかの "◆990101◆" を見つけるという処理で →ヒットします。
上のテキストの最後に改行コードがなかったばあい、
元のテキストは以下のように変換されることになりますから、
"◆001◆abc◆002◆34500◆001◆990101"
この文字列には "◆990101◆" は見つかりません。→「なし」
ヒットさせるためには、
2番目のReplace案のように、文末にもTABを付加してやらねば
なりません。
>ss = vbTab & Replace(StrConv(buf, vbUnicode), vbCrLf,vbTab) & vbTab
こうすれば、
"◆001◆abc◆002◆34500◆001◆990101◆"
~~~~~~~~~~ とヒットさせることができます。
もちろん、ちゃんと文末に改行コードがあるばあいのテキストでも
"◆001◆abc◆002◆34500◆001◆990101◆◆"
~~~~~~~~~~ とヒットさせることができます。
ですから、2番目のReplace案で、文末に改行コードが付いているかいないか
で判定結果が異なる、という問題はもはや問題ではなくなっていると思い
ます。
Yukiさんのコードで気になるのは、
> ReDim buf(LOF(io) - 2)
と 1バイト少なくbufに読んでいることです。
これだと、 文末のCRLF が CR だけになってしまわないですか?
ためしに、そこを
ReDim buf(1 To LOF(io))
と修正して、実行しなおしてみてください。
|
|