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.