0

この形式でファイルを作成する必要があります:

item0000001
item0000002
item0000003
item0000004
item0000005

私は挿入番号を含む列モードを持つUltraEditでこれを行っていました(先頭のゼロを含む開始+増分)。

残念ながら、UltraEdit は 100 万行を超えます。

ファイル容量が大きく、同様の操作ができるテキストエディタをご存知の方はいらっしゃいませんか?

4

1 に答える 1

0

BaltoStar は、どのバージョンの UltraEdit を使用したか、どのようにファイルを作成しようとしたかについては明らかにしていません。

ただし、次の UltraEdit スクリプトを使用して、最後の番号に従って先頭に 0 を付けて増分する番号を含む行を含むファイルを作成できます。

そのスクリプトを UltraEdit v14.20 または UEStudio v9.00 またはそれ以降のバージョンで使用するには、スクリプトのコード ブロックをコピーし、UltraEdit/UEStudio で DOS ライン終端を含む新しい ASCII ファイルに貼り付けます。たとえば、ファイルをCreateLinesWithIncrementingNumber.jsとして、UE/UES スクリプトの優先ディレクトリに保存します。

メニューScriptingのメニュー項目Run Active Scriptをクリックして、スクリプトを実行します。

スクリプトは、増加する数値の最初と最後の値、および増加する数値の左右の文字列についてユーザーにプロンプ​​トを表示します。どちらも空の文字列にすることができます。

次に、後ろに寄りかかって、スクリプトが増分番号の行をブロック単位で新しいファイルにどのように書き込むかを確認します。この UltraEdit スクリプトを使用して、数秒以内に 0 から 5.000.000 まで増加する 150 MB を超えるファイルを作成しました。

if (typeof(UltraEdit.clipboardContent) == "string")
{
   // Write in blocks of not more than 4 MB into the file. Do not increase
   // this value too much as during the script execution much more free
   // RAM in a continous block is necessary than the value used here for
   // joining the lines in user clipboard 9. A too large value results
   // in a memory exception during script execution and the user of the
   // script also does not see for several seconds what is going on.
   var nBlockSize = 4194304;

   // Create a new file and make sure it uses DOS/Windows line terminations
   // independent on the user configuration for line endings of new files.
   UltraEdit.newFile();
   UltraEdit.activeDocument.unixMacToDos();
   var sLineTerm = "\r\n";    // Type of line termination is DOS/Windows.

   // Ask user of script for the first value to write into the file.
   do
   {
      var nFirstNumber = UltraEdit.getValue("Please enter first value of incrementing number:",1);
      if (nFirstNumber < 0)
      {
         UltraEdit.messageBox("Sorry, but first value cannot be negative.");
      }
   }
   while (nFirstNumber < 0);

   // Ask user of script for the last value to write into the file.
   do
   {
      var nLastNumber = UltraEdit.getValue("Please enter last value of incrementing number:",1);
      if (nFirstNumber >= nLastNumber)
      {
         UltraEdit.messageBox("Sorry, but last value must be greater than "+nFirstNumber.toString(10)+".");
      }
   }
   while (nFirstNumber >= nLastNumber);

   var sBeforeNumber = UltraEdit.getString("Please enter string left of the incrementing number:",1);
   var sAfterNumber = UltraEdit.getString("Please enter string right of the incrementing number:",1);

   // http://stackoverflow.com/questions/16378849/ultraedit-how-do-i-pad-out-a-string-with-leading-blanks
   // Convert the highest number to a decimal string and get a copy
   // of this string with every character replaced by character '0'.
   // With last number being 39428 the created string is "00000".
   var sLeadingZeros = nLastNumber.toString(10).replace(/./g,"0");

   // Instead of writing the string with the incrementing number line
   // by line to file which would be very slow and which would create
   // lots of undo records, the lines are collected first in an array of
   // strings whereby the number of strings in the array is determined
   // by value of variable nBlockSize. The lines in the array are
   // concatenated into user clipboard 9 and written as block to the
   // file using paste command. That is much faster and produces just
   // a few undo records even on very large files.
   UltraEdit.selectClipboard(9);
   UltraEdit.clearClipboard();

   // Calculate number of lines per block which depends on the
   // lengths of the 4 strings which build a line in the file.
   var nLineLength = sBeforeNumber.length + sLeadingZeros.length +
                     sAfterNumber.length + sLineTerm.length;
   var nRemainder = nBlockSize % nLineLength;
   var nLinesPerBlock = (nBlockSize - nRemainder) / nLineLength;

   var asLines = [];
   var nCurrentNumber = nFirstNumber;

   while (nLastNumber >= nCurrentNumber)
   {
      // Convert integer number to decimal string.
      var sNumber = nCurrentNumber.toString(10);
      // Has the decimal string of the current number less
      // characters than the decimal string of the last number?
      if (sNumber.length < sLeadingZeros.length)
      {
         // Build decimal string new with X zeros from the alignment string
         // and concatenate this leading zero string with the number string.
         sNumber = sLeadingZeros.substr(0,sLeadingZeros.length-sNumber.length) + sNumber;
      }
      asLines.push(sBeforeNumber + sNumber + sAfterNumber);
      if (asLines.length >= nLinesPerBlock)
      {
         asLines.push(""); // Results in a line termination at block end.
         UltraEdit.clipboardContent = asLines.join(sLineTerm);
         UltraEdit.activeDocument.paste();
         UltraEdit.clearClipboard();
         asLines = [];
      }
      nCurrentNumber++;
   }
   // Output also the last block.
   if (asLines.length)
   {
      asLines.push("");
      UltraEdit.clipboardContent = asLines.join(sLineTerm);
      UltraEdit.activeDocument.paste();
      UltraEdit.clearClipboard();
   }
   // Reselect the system clipboard and move caret to top of new file.
   UltraEdit.selectClipboard(0);
   UltraEdit.activeDocument.top();
}
else if(UltraEdit.messageBox)
{
   UltraEdit.messageBox("Sorry, but you need a newer version of UltraEdit/UEStudio for this script.");
}
else
{
   UltraEdit.newFile();
   UltraEdit.activeDocument.write("Sorry, but you need a newer version of UltraEdit/UEStudio for this script.");
}
于 2014-02-15T12:51:06.687 に答える