0

私は文字列を持っています

'TEST1, TEST2, TEST3'

持ちたい

'TEST1,TEST2,TEST3'

powerbuilder には、replace、substr などの関数がありますか?

4

3 に答える 3

2

確かにあります (ヘルプで簡単に見つけることができます) が、あまり役に立ちません。

そのプロトタイプはReplace ( string1, start, n, string2 )であるため、呼び出す前に置換する文字列の位置を知る必要があります。

これには、置き換えるものがなくなるまでpos()/をループする一般的なラッパーがあります。replace()以下は、グローバル関数のソース コードです。

global type replaceall from function_object
end type

forward prototypes
global function string replaceall (string as_source, string as_pattern, string as_replace)
end prototypes

global function string replaceall (string as_source, string as_pattern, string as_replace);//replace all occurences of as_pattern in as_source by as_replace 

string ls_target
long i, j

ls_target=""
i = 1
j = 1
do
    i = pos( as_source, as_pattern, j )
    if i>0 then
        ls_target += mid( as_source, j, i - j )
        ls_target += as_replace
        j = i + len( as_pattern )
    else
        ls_target += mid( as_source, j )
    end if
loop while i>0

return ls_target

end function

PB の文字列関数 (検索と連結) はそれほど効率的ではないことに注意してください。別の解決策として、 PbniRegex拡張FastReplaceall()機能によって提供されるグローバル関数を使用することもできます。これは、バージョン 9 から 12 までの PB クラシック用の C++ コンパイル済みプラグインです。

于 2012-09-24T12:29:30.177 に答える
2

1 つの方法は、おそらくアクティブな接続があるため、データベースを使用することです。

string ls_stringwithspaces = "String String String     String"
string ls_stringwithnospace = ""
string ls_sql = "SELECT  replace('" + ls_stringwithspaces + "', ' ', '')"

DECLARE db DYNAMIC CURSOR FOR SQLSA;
PREPARE SQLSA FROM :ls_sql USING SQLCA;

OPEN DYNAMIC db;
IF SQLCA.SQLCode > 0 THEN
       // erro handling
END IF
FETCH  db INTO :ls_stringwithnospace;
CLOSE db;

MessageBox("", ls_stringwithnospace)
于 2012-09-24T23:45:09.040 に答える
0

私がする:

  long space, ll_a
     FOR ll_a = 1 to len(ls_string)
            space = pos(ls_string, " ")
            IF space > 0 THEN
            ls_string= Replace(ls_string, space, 1, "")
            END IF
     NEXT
于 2012-09-24T13:01:58.637 に答える