0

次の JScript コードを使用して、ファイル内の文字列を検索しています。

  var myFile = aqFile.OpenTextFile(fileToSearchIn, aqFile.faRead, aqFile.ctANSI);

  while(!myFile.IsEndOfFile())
  {
    s = myFile.ReadLine();
    if (aqString.Find(s, searchString) != -1)
      Log.Checkpoint(searchString + " found.", s); 
  }

  myFile.Close();

これはかなり遅いです。ファイルプロセスでの検索を高速化するために、bash コマンドを使用することを考えていました。

  var WshShell = new ActiveXObject("WScript.Shell");
  var oExec = WshShell.Exec("C:\\cygwin\\bin\\bash.exe -c 'cat \"" + folderName + "/" + fileName + "\"'"); 
  while (!oExec.StdOut.AtEndOfStream)
    Log.Checkpoint(oExec.StdOut.ReadLine());
  while (!oExec.StdErr.AtEndOfStream)
    Log.Error(oExec.StdErr.ReadLine());

bash.exe が開始されるたびに新しいウィンドウが開くため、検索は以前より高速ではありません。別のスイッチを使用してバックグラウンドで bash を実行する可能性はありますか?

4

1 に答える 1

0

を呼び出すたびにWshShell.Exec、コストのかかる新しいプロセスが開始されます。テキストファイルが大きすぎない場合、これにより新しいプロセスが生成されなくなります。

var myFile = aqFile.OpenTextFile(fileToSearchIn, aqFile.faRead, aqFile.ctANSI);
var myFileData = myFile.Read(myFile.Size);
var index = myFileData.indexOf(searchString);
if(index>0)
{
  Log.Checkpoint(searchString + " found.", index); 
}
myFile.Close();

これは行全体ではなく、見つかった場所のインデックスを出力します。行全体が必要な場合は、そこから行末を検索します。

于 2012-06-12T10:37:47.267 に答える