|
umebaind さん、ちゃっぴさん、おはようございます。
>以下のようなプログラムを作りSEEK関数を利用して
>ファイルから検索している文字が見つかれば
>新たに検索する文字を入れ替え
>見つかった行のその次の行から検索し処理を
>短時間で終了させるような事をやりたいのですが
><<<このPGの本体とも言うべきプログラムは約25万件の処理を
>行う為>>>
処理時間を短くする方法は、ちゃっぴさんの投稿にもありましたが、
一回の読込で複数行読み込んでしまう方法があるとは思います。
(アルゴリズムに工夫が必要ですが)。
でも、その前にumebaind さんが投稿されたコードで
1行づつ読み込んだ手法で正常に動作するコードを作ってみてはいかがですか?
見せていただいた限りでは、
SEEK関数及び、SEEKステートメントを使用する意味が私には
わかりませんでした。
入力データもご提示されているので
再現しやすいご質問なのですが、
ご希望の結果も記述されるともっとよかったと思いますよ!!
>Sub FSEEK()
>'MsgBox "引数=" & Mails
> Dim s As String
> Dim MyArray
> Dim d
> s = CurDir 'カレントフォルダを取得する
> MyArray = Split(s, "\", -1) 'カレントフォルダを"¥"で分割する
> 'カレントフォルダを再構成する
> s = MyArray(0) & "\" & MyArray(1) & "\" & MyArray(2) & "\" & "デスクトップ\ファイルシーク"
>
> ChDir s 'カレントフォルダを変更する
> Dim strFILENAME2 As String
> strFILENAME2 = s & "\FILESEEK2.txt"
>
> Dim strREC 'オーバーフローの為
>
> Dim setlist As Variant 'SPLITの戻り値はバリアント型の為
> Dim n, comt, counter
>
> 'strFILENAME2 = s & "\FILESEEK2.txt"
> Dim intFileno As Integer
> Dim i
> Dim jjj As Variant
> Dim uuu As Long
> Dim dse, A1, A2 As String
> Open strFILENAME2 For Input As #1
> Dim strtest
> Dim ddd As String
> Dim FPos As Long
>
> counter = 0
> i = 1
> Do Until EOF(1)
>
> Line Input #1, strREC
debug.print strrec
' として、Seekステートメントが実行された
' 直後の「strREC」の中身を確認して下さい
' たぶん、umebaind さんが意図している内容とは違うと思います
>
> jjj = Split(strREC, ",")
> dse = jjj(1)
>
>A1 = "6columsyori"
>A2 = "12columsyori"
'↑これは、ここにあると
'常に"6columsyori"を調査してしまいますよね
'これは、たぶん、わかってらしてやっているとは思いますが・・・。
>
' カンマ区切りの2列目のデータのみ検索する仕様でよいのですか?
> If StrComp(dse, A1) = 0 Then
>
> MsgBox i & "行目" & "で見つかりました!" & A1 & "行目の処理:" & Loc(1)
>
> FPos = Seek(1)
> MsgBox FPos & "⇔本当の現在位置"
>
> A1 = ""
> A1 = A2 '処理の入れ替え
> Seek #1, FPos + 1 '見つかった位置から検索する
>
> End If
> i = i + 1
>
> Loop
>
>'
> Close #intFileno
>
>
>End Sub
仕様が
>ファイルから検索している文字が見つかれば
>新たに検索する文字を入れ替え
>見つかった行のその次の行から検索し処理
であれば、SEEKステートメントの処理は不要だと思いますが・・・。
一行読み込んだ時点でカレントポインタは、次の行の先頭に
なっていますから・・・。
|
|