2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

文字のバイト数を数える試み |Power Query

Last updated at Posted at 2020-03-20

2020/6/14追記:別記事にて6行で書けましたので、そちらを見てください。:sweat_smile:
文字のバイト数を数える試み~その2 |Power Query

Power QueryじゃExcelのLENB関数みたいなことはできないのかな、と思い調べた結果です。
日本語だけに限っても例外はありそうですので、不具合は現場で対処してください。僕もそういう気持ちで使います。:sweat:
Excelならワークシート関数のLENBを使えるので、その方が確実でしょう。

##コード
今回は挙動の確認を重視したため、関数化せずに示しました。
使えそうなら、関数化でも何でもしてください。

q_表示バイト数計算
//デバッグのため、引数宣言をコメントアウト
//(TargetTexts as text)=>
let
    //↓デバッグ用。確認できたら、コメントアウトして関数にすればいい。
    TargetTexts ="漢字カンジかんじ",

    //1字ずつばらしたテーブルにする。
    SplittedText = Table.FromValue( Text.ToList( TargetTexts ) ),

    //便宜的にリストにすることでJSONのbinaryに変換でき、バイト数を数えることができる。
    AddJsonColumn  =Table.AddColumn(SplittedText,"JSON",each Json.FromValue( {[Value]} )),
    //JSON既定の両端の括弧とダブルクウォートの計4字を除くため、4を引く。
    半角英数判定 =Table.AddColumn(AddJsonColumn,"半角英数判定",each 1=Binary.Length( [JSON] )-4,type logical),

    //判定用に半角カタカナのリストを得る。
    半角カタカナ群 = List.Transform({65381..65439},Character.FromNumber ),

    半角カタカナ判定 =Table.AddColumn(半角英数判定,"半角カタカナ判定",each List.Contains(半角カタカナ群,[Value]),type logical ), 
    表示幅計算    = Table.AddColumn(半角カタカナ判定, "表示幅",each
                         if List.AnyTrue({[半角英数判定],[半角カタカナ判定]}) then 1
                         else 2
                        ,Int64.Type
                   )
in
    表示幅計算

##結果
あとは表示幅のところを集計してやれば、バイト数になります。
image.png

##補足
JSONのbinaryデータがどうなっているのか、ということについての参考。
半角英数以外は1桁にならず、6桁のコードで表示されるようです。(その意味は知らないです:expressionless:

おためしコード
let
    Source = "abcde01234あいうえお",
    Custom1 = Json.FromValue( {Source} ),
    Custom2 = Text.FromBinary( Custom1 )
in
    Custom2

上記のコードを入れるとこんな感じになる。
image.png

##参考
UTF8のサイトを示しておられて、助かりました。
http://orange-factory.com/dnf/utf-8.html

UTF8の文字コード(英語)
https://unicode.org/charts/PDF/UFF00.pdf

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?