SAK 図書館

SAK Streets メインストリート 図書館・カフェ 一覧 SAK Streets 検索
| VB | SQL | Perl | PHP | ASP | JSP | C | PC | HP | FAQ | フリーソフト |

VB テクニック編36 - テキストファイル内文字列検索、ファイル内文字列置き換え

■SAK 関数利用規程

  ・テクニック編で紹介する関数は、私こと Y.SAK の開発関数である。
  ・著作権明示部分の改編は認めない。
  ・個人、企業がこれらの関数を使用したり、一部を使用して新たなシステムや
    プログラムを開発することは自由です。
  ・但し、これらの関数を一部でも使用しているソフトウェアをシェアウェア、
    その他有償プロダクトとして配布・販売するには、私の許可が必要です。
    (無償のフリーソフトウェアなら、自由に配布しても良い。)
  ・これらの関数を使用して発生した、いかなる形での損害も私こと Y.SAK は
    賠償しません。

■テキストファイル内文字列検索

  ・テキストファイル、ソースプログラムなどの文字列を検索するには、
    次のようにする。
    この例では、大文字小文字の区別はしないようにしている。

Private Sub Command1_Click()

  dim ct as long

  ct = CntStr("g:\tmp\test.frm", "label")
  select case ct
    case -1
      msgbox "オープンエラー"
    case -2
      msgbox "リードエラー"
    case else
      msgbox "文字列出現回数 = " & ct
  end select

End Sub

Public Function CntStr(fnm as string, key as string) as long

  dim fno as integer
  dim ct as long
  dim rec as string
  dim s as string
  dim i as long
  dim j as long

'** エラーセット
  CntStr = -1

'** エラートラップ開始
  on local error resume next

'** ファイルオープン
  fno = freefile
  open fnm for input as fno len = 32000
  if err <> 0 then exit function

'** 文字列検索
  s = lcase(key)
  j = len(key)
  ct = 0
  do until eof(fno)
    line input #fno, rec
    rec = lcase(rec)
    i = instr(rec, s)
    do until i = 0
      ct = ct + 1
      i = instr(i + j, rec, s)
    loop
  loop
  if err <> 0 then ct = -2

'** ファイルクローズ
  close fno

'** エラートラップ開始
  on local error goto 0

'** 正常終了セット
  CntStr = ct

End Function

■テキストファイル内文字列置き換え

  ・テキストファイル、ソースプログラムなどの文字列を置き換えるには、
    次のようにする。
    この例では、置き換え前の文字列検索に大文字小文字の区別はしないように
    している。

Private Sub Command1_Click()

  dim ct as long

  ct = RepFile("g:\tmp\test.frm", "g:\tmp\test2.frm", "label", "TestRep")
  select case ct
    case -1
      msgbox "オープンエラー"
    case -2
      msgbox "リードエラー"
    case else
      msgbox "文字列置き換え回数 = " & ct
  end select

End Sub

Public Function RepFile(fnm as string, fnm2 as string, key as string, rep as string) as long

  dim fno as integer
  dim fno2 as integer
  dim ct as long
  dim rec as string
  dim s as string
  dim i as long
  dim j as long
  dim k as long

'** エラーセット
  RepFile = -1

'** エラートラップ開始
  on local error resume next

'** ファイルオープン
  fno = freefile
  open fnm for input as fno len = 32000
  if err <> 0 then exit function
  fno2 = freefile
  open fnm2 for output as fno2 len = 32000
  if err <> 0 then
    close fno
    exit function
  end if

'** 文字列置き換え
  s = lcase(key)
  j = len(key)
  k = len(rep)
  ct = 0
  do until eof(fno)
    line input #fno, rec
    i = instr(lcase(rec), s)
    do until i = 0
      rec = left(rec, i - 1) & rep & right(rec, len(rec) - i - j + 1)
      ct = ct + 1
      i = instr(i + k, lcase(rec), s)
    loop
    print #fno2, rec
  loop
  if err <> 0 then ct = -2

'** ファイルクローズ
  close fno2
  close fno

'** エラートラップ開始
  on local error goto 0

'** 正常終了セット
  RepFile = ct

End Function

■VB テクニック編資料
■VB 入門編資料
■VB 基礎編資料
■VB ビジュアル編資料
| VB | SQL | Perl | PHP | ASP | JSP | C | PC | HP | FAQ | フリーソフト |

SAK Streets メインストリート 図書館・カフェ 一覧 SAK Streets 検索



Copyright (C) 1999-2017 Y.SAK