Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


14087 / 76738 ←次へ | 前へ→

【68151】Re:フォルダ内にあるTXTファイル名の取得
発言  kanabun  - 11/2/7(月) 9:56 -

引用なし
パスワード
   ▼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))
と修正して、実行しなおしてみてください。

6 hits

【68141】フォルダ内にあるTXTファイル名の取得 ISO 11/2/5(土) 16:58 質問
【68142】Re:フォルダ内にあるTXTファイル名の取得 Yuki 11/2/5(土) 17:50 発言
【68144】Re:フォルダ内にあるTXTファイル名の取得 ISO 11/2/6(日) 18:19 質問
【68145】Re:フォルダ内にあるTXTファイル名の取得 kanabun 11/2/6(日) 19:04 発言
【68146】Re:フォルダ内にあるTXTファイル名の取得 kanabun 11/2/6(日) 20:12 発言
【68147】Re:フォルダ内にあるTXTファイル名の取得 ISO 11/2/6(日) 22:28 質問
【68148】Re:フォルダ内にあるTXTファイル名の取得 kanabun 11/2/6(日) 22:51 発言
【68150】Re:フォルダ内にあるTXTファイル名の取得 ISO 11/2/7(月) 6:37 質問
【68151】Re:フォルダ内にあるTXTファイル名の取得 kanabun 11/2/7(月) 9:56 発言
【68154】Re:フォルダ内にあるTXTファイル名の取得 ISO 11/2/7(月) 12:44 お礼

14087 / 76738 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free