Tips

4Dのビルド番号を取得するメソッド

日付2009/08/21
ID75812 (英語原文参照)
バージョン11.4
プラットフォームMac & Win

この記事は、最新ではないバージョンに関連した方法について解説しています。

最新のバージョンでは推奨されていないか、または他の方法で簡単に実現できる可能性があります。

以下のコードは、4Dのビルド番号を返すものです。クロスプラットフォームに記述されており、MacとWindowsそれぞれ異なる方法でビルド番号を調べています。

Macでは、Info.plistファイルを解析しています。これはアプリケーションに関する情報が含まれているXMLファイルです。ファイルはXSLTで変換され、Match regexで結果が取り出されています。

Windowsでは、LAUNCH EXTERNAL PROCESSでVBScriptを実行し、4Dのアプリケーションバージョンを調べています。ここでもMatch regexで最終的に結果を取り出しています。

C_TEXT($0)

C_LONGINT($platform_l)
PLATFORM PROPERTIES($platform_l)

If ($platform_l=Mac OS )
  $xsl_source_t:=""
  $xsl_source_t:=$xsl_source_t+"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
  $xsl_source_t:=$xsl_source_t+"<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">\n"
  $xsl_source_t:=$xsl_source_t+"<xsl:output method=\"text\" />\n"
  $xsl_source_t:=$xsl_source_t+"<xsl:template match=\"/\">\n"
  $xsl_source_t:=$xsl_source_t+""<xsl:for-each select=\"/plist/dict/key[ string() = 'CFBundleShortVersionString' ]\">\n"
  $xsl_source_t:=$xsl_source_t+"xsl:value-of select=\"./following-sibling::*\" />\n"
  $xsl_source_t:=$xsl_source_t+"</xsl:for-each>\n"
  $xsl_source_t:=$xsl_source_t+"</xsl:stylesheet>\n"
  $xsl_source_t:=$xsl_source_t+"</xsl:template>\n"

  C_BLOB($xml_result_x;$xsl_source_x)
  CONVERT FROM TEXT($xsl_source_t;"utf-8";$xsl_source_x)
  DOCUMENT TO BLOB(Application file+":Contents:Info.plist";$xml_source_x)
  APPLY XSLT TRANSFORMATION($xml_source_x;$xsl_source_x;$xml_result_x)
  $xml_result_t:=Convert to text($xml_result_x;"utf-8")

  ARRAY LONGINT($match_pos_al;0)
  ARRAY LONGINT($match_length_al;0)

  If (Match regex("(.*)\\((.*)\\)";$xml_result_t;1;$match_pos_al;$match_length_al))
    $0:=Substring($xml_result_t;$match_pos_al{2};$match_length_al{2})
  End if 

Else 
  $vbs_in_t:=""

  $vbs_in_t:=$vbs_in_t+"Set fso = CreateObject(\"Scripting.FileSystemObject\")\r\n"
  $vbs_in_t:=$vbs_in_t+"WScript.StdOut.Write fso.GetFileVersion(\""
  $vbs_in_t:=$vbs_in_t+Application file+"\")\r\n"

  $script_path_t:=Temporary folder+"$"+String(Milliseconds)+".vbs"

  CONVERT FROM TEXT($vbs_in_t;"UTF-16LE";$script_x)
  BLOB TO DOCUMENT($script_path_t;$script_x)
  SET ENVIRONMENT VARIABLE("_4D_OPTION_HIDE_CONSOLE";"true")
  C_BLOB($stdin_x;$stdout_x;$stderr_x)
  $cscript_t:="cscript //Nologo //U \""+$script_path_t+"\""
  LAUNCH EXTERNAL PROCESS($cscript_t;$stdin_x;$stdout_x;$stderr_x)

  $vbs_out_t:=Convert to text($stdout_x;"UTF-16LE")

  ARRAY LONGINT($match_pos_al;0)
  ARRAY LONGINT($match_length_al;0)

  If (Match regex("(.*)\\.(.*)";$vbs_out_t;1;$match_pos_al;$match_length_al))
    $0:=Substring($vbs_out_t;$match_pos_al{2};$match_length_al{2})
  End if 

  DELETE DOCUMENT($script_path_t)
End if