文字列から指定バイト数分を抜き出す方法について

特定の文字列から指定バイト数分のみを抜き出す方法について教えていただけないでしょうか。
抜き出す際、半角は1バイト、全角は2バイトとして処理したいです。

例えば「東京abc大阪xyz」という文字列に対して左から5バイト抜き出したときに「東京a」を得られるようにしたいです。

おそらく.net frameworkのメソッドの知識が必要になるかと思うのですが、.netはほとんどわからず困り果てています。

一言で言うと、System.Text.EncodingにあるGetByteCountメソッドでそのバイト数が得られます。

それではわからないと思いますので、サンプルプログラムをアップしますね。

文字列から指定バイト数分を抜き出す方法について.zip (11.0 キロバイト)

肝は、SubStringで1文字ずつ評価する文字のバイト数を、指定バイト数になるまで繰り返すってところですね。

※処理エラー系は実装していません。と、バイトのハザマが全角であった場合、全角文字を優先します

3 Likes

こんにちは

以下でいかがでしょうか?

img20210118-3

ShiftJIS化した指定バイト数分のバイト列の取得

byteArray = System.Text.Encoding.GetEncoding("shift_jis").GetBytes(text).Where(Function(x,i) i<n).ToArray

String型に変換

System.Text.Encoding.GetEncoding("shift_jis").GetString(byteArray)
2 Likes

おぉ!答え一発、カシオミニ!!

ありがとうございます。
教えていただいた方法で行うことができました。
大変助かりました。
byteArrayの変数の型はbyte型の配列だったんですね。
最初は何もわからずString型の配列にしてしまってエラーになったりしました。。
.netの書き方は調べてもよくわかりませんでしたが、Function(x,i)は何をしているのでしょうか?

1 Like

こんにちは

このあたりはVB.netにおけるLINQの匿名関数の表現になります。

Whereメソッドの内容は以下になりますが、ひらたく言うと、配列の中身をx,そのインデックス番号をiに代入して順次処理する表現になります。Whereの場合、中身がTrueのものを残す処理になりますので、インデックス番号がnより小さいものだけが残る式になっています。

1 Like

ありがとうございます。
変数宣言なしでxやiが使えることに少し驚きました。
なんとなくではありますがfuncitonのところで処理していることが少し理解できたと思います。
やはり.netがわかってないとUiPathが制限されてしまうと痛感しました。
この度は誠に助かりました。

ありがとうございます。
こちらの方法でも無事に実装できました。
最初ワークフローを見てもよくわからず挫折しそうになったのですが、指定バイト数分になる文字列の位置を探しているということだったんですね。
自分では全く思いつかない方法でした。
.netの箇所でつまづいてしまったので、やはり.netがわからないとUiPathでできることも制限されてしまうと痛感しました。
この度は誠に助かりました。

なかなか難しいですね…
一緒にやっていきましょう!

1 Like

This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.