1. ホーム
  2. Web プログラミング
  3. ASP プログラミング
  4. アプリケーションのヒント

one.asp 複数のプロジェクト、関数ライブラリ、クラスライブラリを1つのバージョンのメソッドに統合

2022-01-16 07:18:41

先日、one.phpを使ってプロジェクト全体を1つのphpファイルにパッケージ化したブログを書いたところ、一部のユーザーから「aspの全体版を書いてほしい」という要望がありました。

簡単な応用シナリオをあげると、XMLとJSONの出力に対応した小さなAPIシステムを開発しました。違いは、基本バージョン (dev/dev.asp) は Access にしか対応しておらず、VIP バージョン (dev/vip.asp) は Access + SQL Server に対応しているので、VIP バージョンでは現在のものに加えて sqlserver サポートを追加し、設定項目を追加する必要があることです。開発工程は、普通に開発すればいいだけです。

開発後、one.asp は index.asp と vip.asp の2つのバージョンにパッケージ化され、プログラム全体は別ファイルとなります。

次の図は、パース処理を示しています。

テストコード一式は、以下のサイトでご覧になれます。 oneasp.rar ダウンロード

コアとなるコードは以下の通りです。

' ====================================================
' Class name: One
' Author: mqycn
' Blog: http://www.miaoqiyuan.cn
' Source code: http://www.miaoqiyuan.cn/p/one-php
' Description: multi-project function library, class library unified into one version of the method
' ====================================================
Class OneAsp
  Private FSO
  Private Root
   
  Private Sub Class_Initialize()
    Set FSO = Server.CreateObject("Scripting.FileSystemObject")
  End Sub
   
  Private Sub Class_Terminate()
    Set FSO = Nothing
  End Sub
   
  Public Function Run(ByVal sourceFile, ByVal saveFile)
    Run = "<hr><b>Input:</b>" & sourceFile & "<br><b>Result:</b>" & Save( saveFile, Include(sourceFile))
  End Function
   
   
  Public Function Include(ByVal path)
    Dim tmpPath, tmpItem, arrPath, index
    tmpPath = ""
    arrPath = Split(path, "/")
    For index = 0 To UBound(arrPath) - 1
      tmpItem = arrPath(index)
      tmpPath = tmpPath & tmpItem & "/"
    Next
    Include = Parse(tmpPath, arrPath(UBound(arrPath)))
  End Function
   
  Private Function Parse(ByVal root, ByVal fileName)
    Call SetRoot(root)
    Dim html
    html = OpenRead(fileName)
     
    Dim preg, pregResult
    Set preg = New Regexp
    preg.pattern = "<! --#include file=""([^""]*)""-->"
    preg.global = True
    preg.ignorecase = True
     
    Dim htmlInclude
    Set pregResult = preg.execute(html)
    For Each htmlInclude In pregResult
      html = Replace(html, htmlInclude, Include(root & htmlInclude.submatches(0)))
    Next
     
    Parse = "<% '" & root & fileName & " Start %" & ">" & vbCrLf & html & vbCrLf & & quot;<% '" & root & fileName & " End %" & "> " & vbCrLf
  End Function
   
  Private Function SetRoot(ByVal rootPath)
    If Right(rootPath, 1) <> "/" Then rootPath = rootPath & "/"
    Root = rootPath
  End Function
   
  Private Function RealPath(ByVal path)
    RealPath = Server.Mappath(Root & path)
  End Function
   
  Private Function OpenRead(ByVal path)
    Dim txtFile
    Set txtFile = FSO.OpenTextFile(RealPath(path))
    OpenRead = txtFile.ReadAll()
    txtFile.close
    On Error GoTo 0
  End Function
   
  Public Function Save(ByVal path, ByVal body)
    Dim txtFile
    Set txtFile = FSO.CreateTextFile(Server.Mappath(path))
    txtFile.write body
    txtFile.close
    Set txtFile = Nothing
    Save = path
  End Function
   
End Class

また、Call new OneAsp.run (開発版、パッケージ版) を使って dev.asp に含まれる全てのコードを index.asp にパックするのは非常に簡単で、解析された内容だけを取得したい場合は Response.Write Server.Htmlencode(Call new OneAsp.include(development version)) で可能です。