投稿時間:2004/07/14(Wed) 22:04 投稿者名:けんいち
URL :
タイトル:バイナリ形式の扱い方について
けんいちといいます。こんにちわ。
バイナリの扱いでおたずねしたいことがあります。 ラインフィールドで改行されているテキストファイルをLine Inputと同じように切り出そうとして、 string形式とバイナリ形式で処理する方法を考えてみました。 両方ともvbLfを見つけたら、検索開始位置からvbLfまでを切り出すというもので、コードは下記の通りです。
おたずねしたいことは、切り出しをするときのスピードについてです。 一般的にバイナリ形式で処理をする方が文字列を扱うより早いと聞いたので試してみたのですが、 以下の方法を比較すると、バイナリで切り出しを行う方が情けないくらい遅いのです。
バイナリ形式で処理をするには、どのような方法が適切(高速)なのでしょうか。 ご教示いただけませんでしょうか。 よろしくお願いします。
'string形式で切り出し: Private m_File as String 'ファイルをString形式で読み込んだもの Private m_FileLength as Long 'ファイルの長さ(文字列) Private m_lngFirst as Long '切り出しを始める位置 Dim i as Long '検索位置 Dim LineRead as String '切り出した文字
Do Until i + m_lngFirst >= m_FileLength 'ファイル全体の長さに達するまで実行
If Mid(m_File, m_lngFirst + i, 1) = vbLf Then
LineRead = Mid(m_File, m_lngFirst, i - 1) '改行コードを無視して、LineReadを別のモジュールに渡す m_lngFirst = m_lngFirst + i + 1 '切り出しの開始位置を設定
Exit Do End If
i = i + 1 Loop
'バイナリ形式で切り出し Private m_File() as Byte 'ファイルをString形式で読み込んだもの Private m_FileLength as Long 'ファイルの長さ(文字列) Private m_lngFirst as Long '切り出しを始める位置 Dim i as Long '検索位置 Dim LineRead as String '切り出した文字
Do Until i + m_lngFirst >= m_FileLength
If StrComp(MidB(m_File, m_lngFirst + i, 1), _ ChrB(10), vbBinaryCompare) = 0 Then '文字列の時のようにイコール文でやってみたら失敗したので、変更してみた
LineRead = StrConv(MidB(m_File, m_lngFirst, i), vbUnicode) 'バイナリを文字列に置き換え、別モジュールに渡す
m_lngFirst = m_lngFirst + i + 2 Exit Do
End If i = i + 1 Loop
|