4D 期待一个带有指针和数组的变量
4D expecting a variable with pointers and array
这是片段:
C_TEXT(;$text)
C_POINTER()
$text:=
$vlElem:=Size of array(->)
Repeat
$vlElem:=$vlElem+1
INSERT IN ARRAY(->;$vlElem)
$vlPos:=Position(Char(Carriage return);)
If ($vlPos>0)
->{$vlElem}:=Substring(;1;$vlPos-1)
:=Substring(;$vlPos+1)
Else
->{$vlElem}:=
End if
Until (="")
我尝试使用以下代码片段启动该方法:
ARRAY TEXT($vtextarr;0)
C_TEXT($vtext)
$vtext:="lorem" + char(Carriage return) + "ipsum" + char(Carriage return) + "lorem"
finv_split_free_text($vtext; $vtextarr)
它报告了“4D 需要一个变量”消息。我做错了什么?
有两个问题:
1) 是你对 1 美元的使用。除了指针和对象之外,您不能直接修改参数。
2) 当没有 CR 时,您是否不清除文本变量。
您遇到的错误是在 Substring 调用中,因为您无法更改 $1 的值。您需要做的就是引用 $text 而不是 $1:
C_TEXT(;$text)
C_POINTER()
$text:=
$vlElem:=Size of array(->)
Repeat
$vlElem:=$vlElem+1
INSERT IN ARRAY(->;$vlElem)
$vlPos:=Position(Char(Carriage return);$text)
If ($vlPos>0)
->{$vlElem}:=Substring($text;1;$vlPos-1)
$text:=Substring($text;$vlPos+1)
Else
->{$vlElem}:=$text
$text:="" // otherwise nothing ever clears the var
End if
Until ($text="")
将参数设置为局部变量,然后处理该变量。
您可能还想查看 TEXT TO ARRAY 命令。
如果您将一个对象(用 C_OBJECT、v15+ 定义)作为参数传递,您可以对特定键进行您显示的那种修改。无论如何,我们中的许多人仍然更喜欢将参数分配给本地变量。
问题出在第二个参数上:如果将其声明为指针,则必须调用传递指针的方法:
finv_split_free_text($vtext; ->$vtextarr)
这是片段:
C_TEXT(;$text)
C_POINTER()
$text:=
$vlElem:=Size of array(->)
Repeat
$vlElem:=$vlElem+1
INSERT IN ARRAY(->;$vlElem)
$vlPos:=Position(Char(Carriage return);)
If ($vlPos>0)
->{$vlElem}:=Substring(;1;$vlPos-1)
:=Substring(;$vlPos+1)
Else
->{$vlElem}:=
End if
Until (="")
我尝试使用以下代码片段启动该方法:
ARRAY TEXT($vtextarr;0)
C_TEXT($vtext)
$vtext:="lorem" + char(Carriage return) + "ipsum" + char(Carriage return) + "lorem"
finv_split_free_text($vtext; $vtextarr)
它报告了“4D 需要一个变量”消息。我做错了什么?
有两个问题: 1) 是你对 1 美元的使用。除了指针和对象之外,您不能直接修改参数。 2) 当没有 CR 时,您是否不清除文本变量。
您遇到的错误是在 Substring 调用中,因为您无法更改 $1 的值。您需要做的就是引用 $text 而不是 $1:
C_TEXT(;$text)
C_POINTER()
$text:=
$vlElem:=Size of array(->)
Repeat
$vlElem:=$vlElem+1
INSERT IN ARRAY(->;$vlElem)
$vlPos:=Position(Char(Carriage return);$text)
If ($vlPos>0)
->{$vlElem}:=Substring($text;1;$vlPos-1)
$text:=Substring($text;$vlPos+1)
Else
->{$vlElem}:=$text
$text:="" // otherwise nothing ever clears the var
End if
Until ($text="")
将参数设置为局部变量,然后处理该变量。
您可能还想查看 TEXT TO ARRAY 命令。
如果您将一个对象(用 C_OBJECT、v15+ 定义)作为参数传递,您可以对特定键进行您显示的那种修改。无论如何,我们中的许多人仍然更喜欢将参数分配给本地变量。
问题出在第二个参数上:如果将其声明为指针,则必须调用传递指针的方法:
finv_split_free_text($vtext; ->$vtextarr)