Remove quoted strings

Removes quoted strings from a text.
<code 4D>
//Str_quotedRemove (string_t {;arrStripped_p) -> txt
//$0 string_t $1 in which quoted strings are removed
// (" is not a delimiter)
//$2 optional :
// “found” = collection of extracted strings
// “tagged” = original string where removed quoted strings are replaced with placeholders

//ex : Position(“find”;“the string”)
// tagged = Position(^1;^2)
// found = [“find”,“the string”]

C_TEXTE($0)
C_TEXTE($1)
C_OBJET($2)

C_TEXTE($processed_t)
C_TEXTE($ligne_t)
C_OBJET($retour_o)

C_ENTIER LONG($params_l)
C_ENTIER LONG($i_l)
C_ENTIER LONG($max_l)
C_ENTIER LONG($start_l)
C_ENTIER LONG($pos_l)
C_ENTIER LONG($len_l)
C_TEXTE($tagged_t)
C_TEXTE($rx_t)

TABLEAU ENTIER LONG($pos_al;0)
TABLEAU ENTIER LONG($len_al;0)
TABLEAU TEXTE($found_at;0)
Si (Faux)
C_TEXTE(Str_quotedRemove ;$0)
C_TEXTE(Str_quotedRemove ;$1)
C_OBJET(Str_quotedRemove ;$2)
Fin de si

$params_l:=Nombre de paramètres
$ligne_t:=$1
Si ($params_l>1)
$retour_o:=$2
ASSERT(OB Est défini($retour_o))
Fin de si

//find positions
$max_l:=Longueur($ligne_t)
$rx_t:=""[^"\\](?:\\.[^"\\])*"
$start_l:=1
Tant que (Trouver regex($rx_t;$ligne_t;$start_l;$pos_l;$len_l))
Si ($pos_l<$max_l)
AJOUTER À TABLEAU($pos_al;$pos_l)
AJOUTER À TABLEAU($len_al;$len_l)
$start_l:=$pos_l+$len_l+1
Si ($start_l>$max_l)
$start_l:=$max_l+1
Fin de si
Sinon
$start_l:=$max_l+1
Fin de si
Fin tant que

//proceed with found positions
$max_l:=Taille tableau($pos_al)
$processed_t:=$ligne_t
$tagged_t:=$ligne_t
Boucle ($i_l;$max_l;1;-1)
$processed_t:=Supprimer chaîne($processed_t;$pos_al{$i_l};$len_al{$i_l}+1)
Si ($params_l>1)
INSÉRER DANS TABLEAU($found_at;1)
$found_at{1}:=Sous chaîne($ligne_t;$pos_al{$i_l}+1;$len_al{$i_l}-1)
$tagged_t:=Supprimer chaîne($tagged_t;$pos_al{$i_l};$len_al{$i_l}+1)
$tagged_t:=Insérer chaîne($tagged_t;"^"+Chaîne($i_l);$pos_al{$i_l})
Fin de si
Fin de boucle

Si ($params_l>1) & ($max_l>0)
$retour_o.tagged:=$tagged_t
OB FIXER TABLEAU($retour_o;“found”;$found_at)
//$zzz:=JSON Stringify($retour_o.found)
Fin de si

$0:=$processed_t
//_
</code 4D>

Note: $2 must be defined before the call when using 2 parameters:
<code 4D>
C_OBJET($retour_o)
$retour_o:=Créer objet() //
$ligne_t:=Str_quotedRemove ($ligne_t;$retour_o)
</code 4D>