如何在字符串连接中处理空值?

时间:2013-08-01 11:26:15

标签: powerbuilder

我在PB中理解,如果变量连接中存在空值,则所有变量都将返回空值。我试图弄清楚在连接过程中是否有办法处理空值。

参见下面的示例,ls_element3返回一个空值,然后肯定所有变量都将返回一个空值,我想要发生的是返回ls_element1和ls_element2下的值。任何人都知道如何在字符串连接期间处理空值?

String ls_message, 
ls_element1 = a, 
ls_element2 = b, 
ls_element3 = null

ls_message = ls_element1 + ls_element2 + ls_element3

5 个答案:

答案 0 :(得分:2)

我可以想出两种基本方法,但我确信还有其他方法。

// insert between assignment and concatenation
IF IsNull (ls_element1) THEN ls_element1 = ""
IF IsNull (ls_element2) THEN ls_element2 = ""
IF IsNull (ls_element3) THEN ls_element3 = ""

//create a function that mimics the if() DataWindow function in PowerScript
function string f_if (boolean ab_Condition, string as_TrueResult, string as_FalseResult)
IF ab_Condition THEN
   RETURN as_TrueResult
ELSE
   RETURN as_FalseResult
END IF

并将您的连接更改为

ls_message = f_if (IsNull (ls_element1), "", ls_element1) + &
   f_if (IsNull (ls_element2), "", ls_element2) + &
   f_if (IsNull (ls_element3), "", ls_element3)
祝你好运,

特里

答案 1 :(得分:0)

您可以通过string()函数和[general]格式将空字符串值强制转换为空字符串。它将用空字符串替换空值:

string ls_a, ls_b, ls_c, ls_d

ls_a = "foo"
setnull(ls_b)
ls_c = "bar"

ls_d = string(ls_a, "[general]") + string(ls_b, "[general]") + string(ls_c, "[general]")
//ls_d is "foobar"

string(variable, '[general]')相当于isnull(variable, '')

但这不是一些漂亮的代码......

答案 2 :(得分:0)

答案 3 :(得分:0)

您可以编写一个函数nullisblank(s)。如果传递的值为NULL,则返回空字符串。否则返回值。这在DataWindows中特别有用。

答案 4 :(得分:0)

if not isnull(ls_element1) then ls_message += ls_element1;
if not isnull(ls_element2) then ls_message += ls_element2;
if not isnull(ls_element3) then ls_message += ls_element3

如果你有这样的事情:

string a = '1';
string b = '';
string c = null;

当你制作一个字符串女巫= a + b时,结果将是1 但是如果你创建一个字符串= a + b + c或a + c,那么它将是= null因为null string会释放其他值。