4D ожидание переменной с указателями и массивом - PullRequest
0 голосов
/ 03 июля 2018

Вот фрагмент:

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 ожидал переменную". Что я сделал не так?

Ответы [ 2 ]

0 голосов
/ 15 сентября 2018

Проблема во втором параметре: если вы объявите его как указатель, вы должны вызвать метод, передающий указатель:

finv_split_free_text($vtext; ->$vtextarr)
0 голосов
/ 03 июля 2018

Есть две проблемы: 1) вы используете $ 1. Вы не можете изменить параметр напрямую, за исключением указателей и объектов. 2) если вы не очищаете текст var, когда нет CR.

Ошибка, которую вы получаете при вызове подстроки, потому что вы не можете изменить значение $ 1. Все, что вам нужно сделать, это указать текст $ вместо $ 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 +) в качестве параметра, вы сможете внести изменения, которые вы показали, в конкретные ключи. Многие из нас по-прежнему предпочитают присваивать параметр локальной переменной в любом случае.

...