Par exemple, les lignes de texte suivantes sont des lignes utilisant ';' comme séparateur, '"' comme enveloppeur et '\' comme caractère d'échappement (pour qu'un champ puisse contenir le caractère de séparation ou d'enveloppement) :
"123";"Texte";"J'aime les truites ; les saumons et les \"humains\"." "456";"BlaBla";"Une choucroute ça mange des routes"
Mon but est d'écrire une fonction get_field($line,$n,$delim,$env,$echap) qui retourne le champ n° $n d'une ligne de texte $line dont les champs sont séparés par $delim et enveloppés par $env, en utilisant le caractère $echap comme caractère d'échappement.
st d'ailleurs sont comportement par défaut), par exemple :123;Texte;J'aime les truites \; les saumons et les "humains"Le caractère d'enveloppement peut être nul (chaine vide, c'e
En prenant ce même texte comme paramètre $line, l'appel get_field($line,2,';','\'); renverra la chaine de caractères "Texte".
J'utilise la fonction ereg pour extraire le contenu du champ à partir d'une simple expression régulière, mais je ne parviens pas à l'écrire correctement.
Pour l'instant, sans gérer le caractère d'échappement, je suis arrivé à ça :
$pattern = "(".$env."([^".$delim."]*)".$env."[".$delim."\n\$]){".($n+1)."}";
Mais le fait qu'à la fin d'une ligne le caractère délimiteur n'ait pas besoin d'être présent (dans ce cas, la fin du champ est marquée par la fin de la ligne) pose des problèmes. Et de toute façon comme le caractère d'echappement n'est pas géré ça n'est pas complet, et toutes mes tentatives de le gérer ont été des échecs.
Donc j'aimerais savoir si qq1 a un meilleur pattern à proposer parce que je commence à m'arracher les cheveux.
Merci.