Appeon PB 電子会議室

コメント

発言No. 更新日 題名(クリックすると発言内容と関連するコメントが表示されます)
24526 18/11/28 12:00:34 RE(3):PBAppeonPB2017: 文字列操作関数の代替処理 By Isao
24525 18/11/05 15:33:17 RE(2):PBAppeonPB2017: 文字列操作関数の代替処理 By MN
24524 18/10/31 11:07:56 RE:PBAppeonPB2017: 文字列操作関数の代替処理 By chisakku
24523 18/10/16 17:43:03 PBAppeonPB2017: 文字列操作関数の代替処理 By MN

カテゴリ:スクリプトの記述
日付:2018年10月31日 11:07 発信者:chisakku
題名:RE:PBAppeonPB2017: 文字列操作関数の代替処理

>2017R2以降、A付きの文字列操作関数の動作が変更になりました。
>内部的にSJISの文字コードに変換後、バイト単位で処理する動作のようです。
>そのため、全角文字の前半または後半のバイトを起点、終点とする場合に、旧Ver(12.6)と結果が異なるケースがありました。

>代替処理を検討するにあたって、皆様はどのような対応をお考えでしょうか。
>(仕様と割り切って、文字数単位での処理に変更するの1つの手ではありますが・・・)

はじめまして
私はXXAに対応する関数を作成しました。

例えば、midAなら

PB12であれば いa が戻り値として取得できたはずですが
midA(Aいa,3,2)→いa

PB2017だと 「a という戻り値になってしまいます。
midA(Aいa,3,2)→「a

そこで、「Aいa」をlenにて1文字ずつ切っていき
A / い / a

ループで1文字ずつ判定して戻り値を作成していっています。
①A  → lenAにより判定 スタート位置に満たないので切り捨て バイト数は保持
②い → lenAにより判定 前の文字(A)のバイト数とこの文字のバイト数を足すと3のためこの文字をスタート位置とする。
③a スタート文字からバイト数を足し込み、取り出しバイト数(2)に満ちたらreturnで返す(これがマルチバイト文字の場合は切り捨て)

みたいな?
ざっくり書きましたが、実際はごちゃごちゃ書いてて割とダサいプログラムになってます↓
でも、とりあえずスピードも処理も今のところ問題は発生していないので
(・・・なんか時限爆弾の爆発待ちみたいな気分ですが・・・)
この関数を使用して画面を運用してます。


基本的にPB12の戻り値が正と考え、
rightAとかposAとか
他の関数もその戻り値になるように対応しています。
・・・ReplaceA は微妙↓

付加情報:

PowerBuilder Version AppeonPB2017

Client SoftWare

OS (記載なし)
DBMS (記載なし)
Browser (記載なし)

Server SoftWare

OS (記載なし)
DBMS (記載なし)
WebServer (記載なし)

Copyright © 2013 Power Future Co., Ltd.