(for Internet Explorer)
Sub  SplitLineAndCRLF( LineAndCRLF as string, out_Line as string, out_CRLF as string )
行の本文と、行末の改行文字を分けます。
【引数】
LineAndCRLF
out_Line
改行文字が末尾に含まれている可能性がある文字列
(出力) 改行文字より前の文字列
ファイル:
vbslib
out_CRLF
(出力) 行末の改行文字
(src)
Function  CutCRLF( Line as string )
改行文字を削除します。
【引数】
Line
返り値
改行文字が削除される文字列
改行文字が削除された文字列
ファイル:
vbslib
(src)
→ T_Replace.vbs # [T_CutCRLF]
テスト
Sub  Translate( TranslatorPath as string, FromLanguage as string, ToLanguage as string )
翻訳ファイルの情報に従って、テキストファイルの一部を翻訳します。
【引数】
TranslatorPath
FromLanguage
翻訳ファイル(*.trans)のパス
翻訳前の言語。 通常 "JP"
ToLanguage
翻訳後の言語。 通常 "EN"
(src)
<?xml version="1.0" encoding="UTF-16"?>
<Translate>
<File>sample1.txt</File>
<File>sample2.c</File>
<T><JP>日本語</JP><EN>Japanese</EN></T>
<T><JP>英語</JP><EN>English</EN></T>
</Translate>
<?xml version="1.0" encoding="UTF-16"?>
<Translate>
<File>sample.txt</File>
<T><JP>日本語</JP><EN>Japanese</EN></T>
<T><JP>英語</JP>
   <EN>English</EN></T>
</Translate>
サンプル
sample.txt の翻訳前
日本語から英語に変換します。
sample.txt の翻訳後
JapaneseからEnglishに変換します。
サンプル : 複数のファイルを翻訳する
JapaneseToEnglish.trans (翻訳ファイル)
スクリプト
Translate  "sample.trans", "JP", "EN"
スクリプト
Translate  "JapaneseToEnglish.trans", "EN", "JP"
英語 から 日本語 へ
sample1.txt の翻訳後
English から Japanese へ
sample1.txt の翻訳前
sample2.c の翻訳前
sample2.c の翻訳後
French から 日本語 へ
French から Japanese へ
File タグに指定したファイルを翻訳します。
→ T_Translate.vbs # [T_Translate1]
→ T_Translate.vbs # [T_Translate_sth]
テスト
英語に翻訳するときに、英文字以外が残っていたときは、エラーが発生します。
関連
File タグは、T タグの後に置くこともできます。
<JP> 〜 </JP> の間と、<EN> 〜 </EN> の間は、複数行にしないでください。
Sub  TranslateTest( TranslatorPath as string, FromLanguage as string, ToLanguage as string,
                    OutFolderPath as string )
翻訳ファイルの情報に従って、テキストファイルの一部を翻訳できるかどうかチェックします。
【引数】
TranslatorPath
FromLanguage
翻訳ファイルのパス
翻訳前の言語。 通常 "JP"
ToLanguage
翻訳後の言語。 通常 "EN"
OutFolderPath
翻訳後の出力先ファイル・パス。 または "" = 出力しない
(src)
参考
関連
→ T_Translate.vbs # [T_TranslateTest]
テスト
→ T_Translate.vbs # [T_TranslateTest_sth]
翻訳ファイル
Function  new_TranslateToEnglish( DictionaryCsvPath as string ) as TranslateToEnglish
辞書ファイルを使って、ソース・ファイルのコメントを英訳します。
【引数】
DictionaryCsvPath
CSV 形式の辞書ファイルのパス
ToolsLib.vbs
モジュール・ファイル:
(src)
サンプル:
Dim tr : Set tr  = new_TranslateToEnglish( "Text1.txt.trans.csv" )
'// tr.IsReverseTranslate = True
Dim w_:Set w_=AppKey.NewWritable( tr.Writable ).Enable()
tr.Translate
いわゆる英訳ソフトのような、文法解析を行って大きな辞書を引くような翻訳ではありません。
内部では、単純なテキストの置換と、置換後のファイルに含まれる文字が英文字だけかどうか
のチェックをします。 翻訳後に英文字以外の文字が残ったら、TranslateToEnglish::c.
E_NotEnglishChar エラーになります。
英訳処理のサンプル
Text1_trans.csv
Text1.c, %eng%\Text1.c
メイン関数, Main function
サブ関数, Sub function
テスト
#include  <stdio.h>

int  main() { }  // メイン関数
int  sub() { }   // サブ関数
Text1.c
%eng%\Text1.c
#include  <stdio.h>

int  main() { }  // Main function
int  sub() { }   // Sub function
1行目の左は、変換前のファイルパスです。
1行目の右は、変換後のファイルパスです。
1行目は、% % で囲んだ環境変数を指定できます。
1行目の右を省略すると、ファイルの置き換えをします。
2行目以降は、翻訳するキーワードを指定します。
→ TranslateToEnglish フォルダ
キーワード:
関連
→ sample / CheckEnglishOnly
関連
英文字以外が無いか、フォルダ全体をチェックする
Text1.txt.trans.csv
廃止
.IsReverseTranslate
Property  TranslateToEnglish::IsReverseTranslate as boolean
.Writable
Property  TranslateToEnglish::Writable as string
.Translate
Sub  TranslateToEnglish::Translate()
取得
True なら、翻訳する方向を逆に設定します。
EnglishTextPath から NotEnglishTextPath に翻訳します。
デフォルトは False です。
出力ファイルのパス。
AppKey.NewWritable に指定してください。
翻訳を実行します。
Property  TranslateToEnglish::c.E_NotEnglishChar as integer
翻訳後も英文字以外の文字が残っていたときのエラーコード。
.Reverse が呼び出されたときは、このエラーは発生しません。
.NotEnglishTextPath
.EnglishTextPath
Property  TranslateToEnglish::EnglishTextPath as string
英語のテキスト・ファイルのパス。
NotEnglishTextPath と同じパスを指定できます。
new_TranslateToEnglish を呼び出したら、翻訳 CSV ファイルに書かれたパスが格納されます。
このとき、翻訳 CSV ファイルに書かれた環境変数は展開されます。
.Translate を呼び出す前に変更することができます。
英語以外のテキスト・ファイルのパス。
new_TranslateToEnglish を呼び出したら、翻訳 CSV ファイルに書かれたパスが格納されます。
このとき、翻訳 CSV ファイルに書かれた環境変数は展開されます。
.Translate を呼び出す前に変更することができます。
Property  TranslateToEnglish::NotEnglishTextPath as string
.DictionaryCsvPath
Property  TranslateToEnglish::DictionaryCsvPath as string
CSV 形式の辞書ファイルのパス。
new_TranslateToEnglish に指定した引数の値と同じです。
廃止
  cd  g_fs.GetParentFolderName( WScript.ScriptFullName )
  Dim  trs, tr, folder, fnames(), fname, w_, step_path, b

  set_ "folder_jp", "C:\FolderA"
  set_ "folder_en", GetAbsPath( "..\folder_en", WScript.ScriptFullName )

  echo_line
  echo  "コメントを英訳します"
  echo  "From: "+ GetVar( "folder_jp" )
  echo  "To:   "+ GetVar( "folder_en" )
  pause


  '//=== 翻訳 CSV ファイルを集める
  Set trs = new ArrayClass
  ExpandWildcard  GetVar( "folder_en" ) +"\*.trans.csv", F_File or F_SubFolder, folder, fnames
  For Each fname in fnames
    step_path = fname : CutLastOf  step_path, ".trans.csv", Empty
    set_ "step", step_path

    trs.Add  new_TranslateToEnglish( folder +"\"+ fname )
  Next


  '//=== 翻訳する。 ただし、翻訳済みファイルがあるとき(英文字以外が無く、新しいとき)は処理しない
  For Each tr  In trs.Items
    b = MakeRule_compare( tr.EnglishTextPath, tr.NotEnglishTextPath )
    If not b Then  b = ( GetLineNumsExistNotEnglighChar( tr.EnglishTextPath, Empty ) > 0 )
    If b Then
      Set w_=AppKey.NewWritable( tr.Writable ).Enable()
      tr.Translate
    End If
  Next
%folder_jp%\%step%, %folder_en%\%step%
日本語, Japanese
翻訳ファイル *.trans.csv を、変換対象のフォルダーと同じ構成で配置して、翻訳します。
翻訳ファイル *.trans.csv
廃止
Function  GetLineNumsExistNotEnglighChar( Path as string, out_LineNums as Array of integer ) as integer
テキスト・ファイルの中に、英文字以外の文字が含まれる行番号の配列を取得します。
【引数】
Path
out_LineNums
テキスト・ファイルのパス
(出力) 英文字以外の文字が含まれる行番号の配列、Empty 指定可
ToolsLib.vbs
モジュール・ファイル:
関連
(src)
返り値
英文字以外の文字が含まれる行数
サンプル:
  Dim tr : Set tr = new_TranslateToEnglish( "Text1.txt.trans.csv" )
  echo  GetLineNumsExistNotEnglighChar( tr.EnglishTextPath, Empty )
  Dim  i, line_nums
  GetLineNumsExistNotEnglighChar  "Text1.txt", line_nums  '//[out] line_nums
  For Each i  In line_nums
    echo  i
  Next
日本語(文字コード256以上)を 2文字として文字数を返します。
Function  CheckEnglishOnly( CheckFolderPath as string, SettingPath as string )
    as ArrayClass<CheckEnglishOnlyFound>
テキスト・ファイルの中に、英文字以外の文字が含まれるファイルを一覧します。
【引数】
CheckFolderPath
SettingPath
調べるフォルダのパス
設定ファイルのパス。または Empty
ToolsLib.vbs
モジュール・ファイル:
返り値
英文字以外の文字が含まれるファイルの情報
→ ToolsLib.vbs # [CheckEnglishOnly]
  Dim  founds, found, file

  Set founds = CheckEnglishOnly( "FolderA", "SettingForCheckEnglish.ini" )

  For Each file  In founds.Items
    For Each found  In file.NotEnglishItems.Items
      echo  file.Path +"("& found.LineNum  &"): "+ found.NotEnglishText
    Next
  Next
サンプル:
テスト
実行ファイル版、設定ファイルの例
関連
簡易版
サンプル: scriptlib フォルダーをチェックする
→ 3.CheckNotEnglish フォルダー
→ T_CheckEnglishOnly.vbs # [T_CheckEnglishOnly]
ソース
MakeSettingForCheckEnglish  "SettingForCheckEnglish.ini", Array( "Sample.trans" )
Sub  MakeSettingForCheckEnglish( CheckEnglishOnlyFilePath as string,
    TranslateFilePaths as array of string )
の対象外となるファイルの一覧を翻訳ファイル(*.trans)から作成します。
【引数】
CheckEnglishOnlyFilePath
TranslateFilePaths
ファイルの一覧が書かれた出力ファイルのパス
翻訳ファイルのパスの配列
関連
テスト
→ ToolLib.vbs # [MakeSettingForCheckEnglish]
サンプル
ソース
→ T_CheckEnglishOnly.vbs # [T_MakeSettingForCheckEnglish]
[CheckEnglishOnlyExe]

;// From "sample.trans" file
ExceptFile = Sample1.txt
ExceptFile = ..\Sample2.txt
<?xml version="1.0" encoding="UTF-16"?>
<Translate>
<File>Sample1.txt</File>
<File>..\Sample2.txt</File>
<T><JP>日本語</JP><EN>Japanese</EN></T>
<T><JP>英語</JP><EN>English</EN></T>
</Translate>
VBScript
  Dim  zip1, sub_fo1, step_paths, step_path, target_root, work_root

  '//=== convert binary file emulated
  zip1 = work_root +"\converted_files"
  unzip  "converted_files.zip", zip1, Empty

  sub_fo1 = "target"
  step_paths = Array( sub_fo1+"\file1.bin", sub_fo1+"\file2.bin" )
  For Each step_path  In step_paths
    ConvertBinaryEmulated  target_root +"\"+ step_path, Empty, False, _
                           zip1+"\src\"+step_path, zip1+"\dst\"+step_path
  Next
  del  zip1
書きかけ
(src)
その他
-
vbslib のテンポラリ・フォルダの場所の例: (Windows Vista/7 のとき)
C:\Users\user1\AppData\Local\Temp\Report
vbslib を使うと、PC の内臓 HDD (OSが指定するテンポラリ・フォルダの中の Report フォルダ)
に、一時ファイルを作成することがあります。
PCを借りているときは情報漏えいに注意してください。
参考
テンポラリ・フォルダの設定は、
関数を作成することで変更できます。
テンポラリ・フォルダを削除するときは、
ゴミ箱にも一時ファイルが格納されることがあります。
ごみ箱を空にしてください。
C:\Documents and Settings\user1\Local Settings\Temp\Report
Function  GetTempPath( BasePath as string ) as string
の中のファイルやフォルダのパスを返します。
  Dim  f, path
  Dim  c : Set c = g_VBS_Lib

  path = GetTempPath( "DataA_*.xml" )
  Set f = OpenForWrite( path, c.Unicode )
  f.WriteLine  "<sample/>"
  f = Empty
  start  path
サンプル:
サンプル・ファイルパス: (Windows Vista のとき)
C:\Users\user1\AppData\Local\Temp\Report\090401\DataA_090401_1300_1.xml
BasePath 引数は、テンポラリ・フォルダからの相対パスになり、* はタイムスタンプと
識別番号になります。 ? は識別番号になります。 存在するファイルパスにならない
ように調整され、常に新しいファイルを作成します。 同時に保存期間を超えたファイル
やフォルダを削除します。(起動したプロセスで初めてテンポラリ・フォルダにファイル
を作成するとき、および g_TempPath= Empty のときのみ)
DataA_*.xml
c.Unicode
<sample/>
(src)
  start  CreateFile( "*.xml", obj.xml )
GetTempPath
サンプル:  obj の xml プロパティを、テンポラリファイルに出力して開きます。
obj
にワイルドカードを指定すれば、テンポラリ・フォルダにファイルを作る
ので、簡単にテキストファイルや XML ファイルを作成できます。
ファイルパスは、環境変数 TEMP の値を使っています。 上段は * 、下段は ? を使ったとき。
C:\Users\user1\AppData\Local\Temp\Report\090401\DataA_1.xml
【引数】
BasePath
返り値
ファイル名のテンプレート。 * または ? を含んでもよい
テンポラリ・フォルダの中のファイルパス
BasePath に、* または ? を含んでいる場合は、ファイルまたはフォルダが存在
しないパスに変換して返します。
デスクトップの絶対パスを返す。
絶対パスを返す。
相対パスを返す。
親フォルダの絶対パスを返す。
絶対パスかどうかを返します。
ファイルパスの最後文字列を追加します。
参考
関連
Function  DesktopPath() as string
デスクトップの絶対パスを返します。
(src)
Function  GetAbsPath( StepPath as string, BasePath as string ) as string
絶対パスを返します。
【引数】
StepPath
BasePath
返り値と同じファイルの相対パス
基準フォルダの絶対パス、Empty でカレントフォルダ
返り値
StepPath と同じファイルの絶対パス
(src)
g_fs.GetAbsolutePathName は、StepPath に * が入っていると、ピリオドに
置き換わってしまいますが、GetAbsPath では発生しません。
サンプル:
  path2 = GetAbsPath( Path, BaseFolderPath )
  path2 = GetAbsPath( "..\"+ Path, BaseFilePath )
  path2 = GetAbsPath( Path, GetParentAbsPath( BaseFilePath ) )
BasePath をファイルパスにしたときは、StepPath を1つ親にしてください。
GetAbsPath(    "file.txt", "C:\folder1" ) =
GetAbsPath( "..\file.txt", "C:\folder1\file2.txt" )
テスト
関連
→ T_Path.vbs # [T_GetAbsPath]
親フォルダー、または、その親フォルダー … と探すときは、"..." とピリオドを
3つ並べてください。 ただし、スクリプトを記述できるときは、
GetAbsPath( "...\file.txt", "C:\folder1\sub" )
上記の返り値は、C:\folder1\sub\file.txt 、C:\folder1\file.txt 、C:\file.txt
のいずれかになります。 または、E_PathNotFound エラーになります。
を呼ぶ方が可読性が高まります。
Function  GetStepPath( AbsPath as string, BasePath as string ) as string
相対パスを返します。
【引数】
AbsPath
BasePath
返り値と同じファイルの絶対パス
基準フォルダの絶対パス
返り値
AbsPath と同じファイルの相対パス
(src)
テスト
→ T_Path.vbs # [T_GetStepPath]
Function  GetParentAbsPath( Path as string ) as string
Path  に指定したファイルやフォルダの親フォルダの絶対パスを返します。
【引数】
Path
基準パス(相対パスは、カレントからの相対)
返り値
親フォルダの絶対パス
(src)
cd  "C:\Folder"
Assert  GetParentAbsPath( "sub\file.txt" ) = "C:\Folder\sub"
関連
参考
サンプル
(src)
Function  GetParentFoldersName( FilePath as string, Level as integer,
    SeparatorReplacedStr as Empty or string )
FilePath  に指定したファイルが入ったフォルダーの名前を Level 個つなげたものを返します。
【引数】
FilePath
基準となるファイルまたはフォルダーのパス
Level
親フォルダの個数。 親の方向へたどる数。 1以上
cd  "C:\Folder"
Assert  GetParentFoldersName( "sub\file.txt", 1, "/" ) = "sub"
Assert  GetParentFoldersName( "sub\file.txt", 2, "/" ) = "Folder/sub"
Assert  GetParentFoldersName( "sub\file.txt", 99, "/" ) = "C:/Folder/sub"
サンプル
複数の親フォルダーの名前をつなげたもの
返り値
フォルダー区切り文字を置き換えた後の文字
SeparatorReplacedStr
テスト
→ T_Path.vbs # [T_GetParentFoldersName]
Level が大きすぎても、エラーにはなりません。
Level = 1 なら、ファイルが入っているフォルダーの名前が返ります。
Level = 2 なら、ファイルが入っているフォルダーの親フォルダーの名前と、SeparatorReplacedStr
と、ファイルが入っているフォルダーの名前を結合した文字列が返ります
GetFilePathSeparetor
Function  GetFilePathSeparetor( Path as string ) as string
Path  に入っているフォルダーの区切り記号をします。
【引数】
Path
ファイルなどのパス
返り値
フォルダーの区切り記号
(src)
Assert  GetFilePathSeparetor( "http://www.example.com/" ) = "/"
サンプル
フォルダーの区切り記号が無いときは、"\" を返します。
Function  SearchParent( StepPath as string ) as string
StepPath  に指定したファイルまたはフォルダを、親フォルダに向かって探します。
【引数】
StepPath
ファイル名、または相対パス
返り値
見つかったファイルまたはフォルダの絶対パス
サンプル:
  Set root = LoadXML( SearchParent( "common.xml" ), Empty )
(src)
→ T_Path.vbs # T_SearchParent
テスト
..\common.xml などを開きます
関連
見つからないときは、Empty を返します。
を使ってピリオドを3つ並べる記法を展開する