1

这是片段:

C_TEXT($1;$text)
C_POINTER($2)

$text:=$1
$vlElem:=Size of array($2->)
Repeat 
    $vlElem:=$vlElem+1
    INSERT IN ARRAY($2->;$vlElem)
    $vlPos:=Position(Char(Carriage return);$1)
    If ($vlPos>0)
        $2->{$vlElem}:=Substring($1;1;$vlPos-1)
        $1:=Substring($1;$vlPos+1)
    Else 
        $2->{$vlElem}:=$1
    End if 
Until ($1="")

我尝试使用以下代码段启动该方法:

ARRAY TEXT($vtextarr;0)
C_TEXT($vtext)
$vtext:="lorem" + char(Carriage return) + "ipsum" + char(Carriage return) + "lorem"
finv_split_free_text($vtext; $vtextarr)

它报告“4D 期待变量”消息。我做错了什么?

4

2 回答 2

1

有两个问题:1)是你使用了$1。除了指针和对象之外,您不能直接修改参数。2)当没有CR时你不清除文本var。

您得到的错误是在 Substring 调用上,因为您无法更改 $1 的值。您需要做的就是引用 $text 而不是 $1:

C_TEXT($1;$text)
C_POINTER($2)

$text:=$1
$vlElem:=Size of array($2->)

Repeat 
  $vlElem:=$vlElem+1
  INSERT IN ARRAY($2->;$vlElem)
  $vlPos:=Position(Char(Carriage return);$text)
    If ($vlPos>0)
      $2->{$vlElem}:=Substring($text;1;$vlPos-1)
      $text:=Substring($text;$vlPos+1)
    Else 
      $2->{$vlElem}:=$text
      $text:=""  //  otherwise nothing ever clears the var
    End if
  Until ($text="")

将参数设置为局部变量,然后处理该变量。

您可能还想查看TEXT TO ARRAY命令。

如果您将对象(使用 C_OBJECT,v15+ 定义)作为参数传递,您可以对特定键进行显示的那种修改。无论如何,我们中的许多人仍然喜欢将参数分配给本地变量。

于 2018-07-03T14:01:53.730 回答
0

The problem is in the second parameter: if you declare it as pointer, you have tu call the method passing a pointer:

finv_split_free_text($vtext; ->$vtextarr)
于 2018-09-15T07:18:40.887 回答