「バイト数」の版間の差分

提供: MeryWiki
ナビゲーションに移動 検索に移動
(→‎バイト数と文字数・行数: ケタ区切りを関数化)
(sukemaru版「バイト数と文字数・行数」を別ページに移動)
 
29行目: 29行目:
 
}
 
}
 
</source>
 
</source>
 +
<br><br>
  
<br>
 
<br>
 
 
== 文字コードを指定,または取得してバイト数を計算 ==
 
== 文字コードを指定,または取得してバイト数を計算 ==
 
文字コードを指定,または取得してバイト数を計算します.<br>
 
文字コードを指定,または取得してバイト数を計算します.<br>
85行目: 84行目:
 
}
 
}
 
</source>
 
</source>
 +
<br><br>
  
 
== バイト数と文字数・行数 ==
 
== バイト数と文字数・行数 ==
 
+
;イベントマクロ用
※ ロースペックPC用 ※
+
[[#バイト数|kuro 版]] と [[#|ks 版]] のコードを利用して、選択範囲または文書全体の「文字数・行数・バイト数 (ファイルサイズ)」をステータスバーに表示します。
<br>Kuro 氏の「バイト数」のソースコードに文書全体または選択範囲の「文字数と行数」を表示させるコードを追加しました。行数の表示方法は、オプション設定の「行の表示方法」にて論理座標/表示座標を選択してください。
+
<br>
 
+
→ 選択範囲の文字列のヒット数をカウントする機能と統合して「[[検索ヒット数表示(選択文字列)#機能強化バージョン|検索ヒット数表示(選択文字列)]]」のページに移動しました。 (sukemaru, 2019/12/03)
* 大きいファイルでは「選択範囲が変更されたとき」のイベントで自動実行する設定にすると選択範囲を解除した直後のレスポンスが悪くなるので、大きいファイルで "選択範囲なし" のときは文書全体の文字数と行数だけをステータスバーに表示します。
 
: ※ ロースペックPCで「カーソルが移動したとき」や「テキストが変更されたとき」などのイベントを有効にするとエディタのレスポンスはさらに悪くなりますので、有効化するイベント項目は精査してください。
 
* 「大きいファイル」の定義は、コード後半部分の '''dLines > nnnn''' で文書全体の行数、 '''d.Text.length > mmmm''' で文書全体の文字数 を基準に設定します。
 
: ※ マシンスペックにあわせて適当に大きな数値をあてておき、エディタの動作がモタつくようなら数値を下げてください。 <br> または、数値は大きいままにしておき、ファイル名やファイルパスを指定して動作を制限してください。
 
* 「大きいファイル」でも Ctrl+A などで文書全体を範囲選択すると、全体のバイト数を表示できます。
 
 
 
▼ 制限事項 ▼
 
* 「行の表示方法」が論理行でも表示行でも、行番号のクリック(ドラッグ)で行選択したときは、行数表示は見かけよりも +1 大きい数値を返します。これはステータスバー中央に表示される選択範囲の行数にあわせた仕様です。
 
* マクロの Collapse() メソッドで選択範囲を解除した場合に、表示内容が文書全体の文字数/行数/バイト数に切り替わらないことがあります。SetActivePos( GetActivePos() ) メソッドで選択範囲を解除した場合は表示内容が正常に切り替わるようです。
 
 
 
<source lang="javascript">
 
#title = "バイト数と文字数・行数"
 
/**
 
* ------------------------------------------------------------------------
 
* バイト数
 
* Oliginal Copyright (c) Kuro. All Rights Reserved.
 
* www:    http://www.haijin-boys.com/
 
*
 
* 編集中の文書のバイト数をステータスバーに表示します。
 
* 半角文字は1バイト、全角文字は2バイトとして計算します。
 
* ------------------------------------------------------------------------
 
* バイト数と文字数・行数
 
* modified by sukemaru
 
*
 
* バイト数と文字数・行数をステータスバーに表示します。
 
* 大きいファイルで "選択範囲なし" のときは文書全体の文字数と行数だけをステータスバーに表示します。
 
* ------------------------------------------------------------------------
 
*/
 
 
 
//■行の表示方法 Logical = true; 行数を論理行で計算 / Logical = false; 表示行で計算する
 
var Logical = true;
 
 
 
var d = document, s = document.selection;
 
if (s.IsEmpty) {
 
  var st = d.Text;
 
  var dLines = Logical ? d.GetLines(0)
 
                      : d.GetLines(meGetLineView);
 
}
 
else {
 
  var st = s.Text;
 
  var sLines = Logical ? st.split("\n").length
 
                      : 1 + s.GetBottomPointY(mePosView) - s.GetTopPointY(mePosView);
 
}
 
//文字数と行数をケタ区切りに
 
var charValue = NumSeparate(st.length)
 
              + " 文字";
 
var lineValue = " ( "
 
              + NumSeparate(s.IsEmpty ? dLines : sLines)
 
              + " 行 )";
 
 
 
var lowFullName = d.FullName.toLowerCase(); //ファイルパス(小文字)
 
var lowName = d.Name.toLowerCase(); //ファイル名(小文字)
 
 
 
//■範囲選択なしのとき、大きいファイルでは文書全体のバイト数を計算しない
 
//※ if - else 文なので、条件がエラーにならないようにサンプル(ダミー)の条件を残しておくこと
 
if (s.IsEmpty && (
 
    dLines > 2000 || //■文書全体の「行数」で制限
 
    d.Text.length > 40000 || //■文書全体の「文字数」で制限
 
    /* ココに条件を追加する(末尾に || を付けること) */
 
   
 
//  d.Name.match(/hoge.*\.xml/i) || //■「ファイル名」にマッチ(正規表現)
 
//  lowName == "fuga.dat" || //■「ファイル名」にマッチ
 
    /* 有効化する最後の項目には末尾に || を付けない */
 
    lowFullName == "c:\\piyo.txt" //■「フルパス」にマッチ
 
)) {
 
  //文書全体の文字数と行数をステータスバーに表示
 
  window.Status = charValue + lineValue
 
                + "  Ctrl+A キーで全体のバイト数を表示します";
 
}
 
else { //大きいファイルでないとき、または範囲選択ありのとき
 
  //計算処理は kuro 版まま
 
  var bytes = 0;
 
  for (var i = 0; i < st.length; i++) {
 
    var c = st.charCodeAt(i);
 
    if ((c >= 0x0 && c < 0x81) ||
 
        (c >= 0xff61 && c < 0xffa0) ||
 
        (c == 0xf8f0) ||
 
        (c >= 0xf8f1 && c < 0xf8f4))
 
      bytes += 1;
 
    else
 
      bytes += 2;
 
  }
 
  //選択範囲または文書全体のバイト数と、文字数と行数をステータスバーに表示
 
  window.Status = charValue + lineValue
 
                + " / "
 
                + NumSeparate(bytes)
 
                + " バイト";
 
}
 
 
 
function NumSeparate(num) {
 
  return num.toString().replace(/(\d)(?=(\d{3})+$)/g, "$1,");
 
}
 
 
 
</source>
 

2019年12月3日 (火) 21:18時点における最新版

バイト数[編集]

編集中の文書のバイト数をステータスバーに表示します。半角文字は1バイト、全角文字は2バイトとして計算します。

// -----------------------------------------------------------------------------
// バイト数
//
// Copyright (c) Kuro. All Rights Reserved.
// www:    http://www.haijin-boys.com/
// -----------------------------------------------------------------------------

with (document) {
  var s = document.selection.Text;
  if (s == "")
    s = Text;
  var j = 0;
  var l = s.length;
  for (var i = 0; i < l; i++) {
    var c = s.charCodeAt(i);
    if ((c >= 0x0 && c < 0x81) || (c == 0xf8f0) ||
      (c >= 0xff61 && c < 0xffa0) || (c >= 0xf8f1 && c < 0xf8f4))
      j += 1;
    else
      j += 2;
  }
  window.status = ("" + j).match(/./g).reverse().join("")
    .replace(/(\d{3})/g, "$1,").match(/./g)
    .reverse().join("").replace(/^,/, "") + " バイト";
}



文字コードを指定,または取得してバイト数を計算[編集]

文字コードを指定,または取得してバイト数を計算します.

オプション

encoding 文字コード指定.
空の場合はそのドキュメントの文字モード.
sjis のように直接指定すれば常にその文字コードで計算.
CRLF 改行コードの指定.
CR + LF の場合は true.
CR または LF の場合は false.
BOM BOM コード分を加算するかの指定.
BOM 分を加算するときは true.(保存したファイルのサイズと一致します)
BOM 分を加算しない場合は false.
var encoding = "";  // 指定時はその文字コード.
var CRLF = true;    // 改行コードが CRLF なら true.そうでないなら false.
var BOM = true;     // BOM を考慮する場合は true.考慮しない場合は false.

var charset = "";
var s = Document.Selection.IsEmpty ? Document.Text : Document.Selection.Text;
s = CRLF ? s.replace(/\r?\n/g, "\r\n") : s;
if (!encoding) {
  switch (Document.Encoding){
    case meEncodingUTF16LE:
    case meEncodingUTF16BE:               WriteBytes(s.length * 2 + (BOM?2:0)); Quit();
    case meEncodingUTF8WithSignature:
    case meEncodingUTF8WithoutSignature:  charset = "utf-8";        break;
    case meEncodingUTF7:                  charset = "utf-7";        break;
    case meEncodingEUC:                   charset = "euc-jp";       break;
    case meEncodingJIS:                   charset = "iso-2022-jp";  break;
    case meEncodingShiftJIS:              charset = "sjis";         break;
  }
} else {
  charset = encoding;
}

var adodb = new ActiveXObject('ADODB.Stream');
adodb.Type = 2;
adodb.Charset = charset;
adodb.Open();
adodb.WriteText(s);
var bytes = adodb.Position;
adodb.Close();

if (!encoding && (Document.Encoding == meEncodingUTF8WithoutSignature || (!BOM && Document.Encoding == meEncodingUTF8WithSignature))) {
  bytes -= 3;
}
WriteBytes(bytes);
function WriteBytes(bytes){
  Status = String(bytes).split("").reverse().join("").replace(/(\d{3})/g, "$1,").split("").reverse().join("").replace(/^,/, "");
}



バイト数と文字数・行数[編集]

イベントマクロ用

kuro 版ks 版 のコードを利用して、選択範囲または文書全体の「文字数・行数・バイト数 (ファイルサイズ)」をステータスバーに表示します。
→ 選択範囲の文字列のヒット数をカウントする機能と統合して「検索ヒット数表示(選択文字列)」のページに移動しました。 (sukemaru, 2019/12/03)

スポンサーリンク