J'ai un script Perl qui consomme un fichier XML sous Linux et, de temps en temps, il existe des lignes CRLF (HEX 0D0A, DOS de nouvelles lignes) dans certaines des valeurs de nœud qui. p>
Le système qui produit le fichier XML écrit tout comme une seule ligne, et il semble que cela décide parfois que cela soit trop long et écrit un CRLF dans l'un des éléments de données. Malheureusement, il n'y a rien que je puisse faire sur le système de fourniture. P>
J'ai juste besoin de les supprimer de la chaîne avant de le traiter. p>
J'ai essayé toutes sortes de remplacement de regex à l'aide des classes de Perl Char, des valeurs hexagonales, toutes sortes et rien ne semble fonctionner. p>
J'ai même exécuté le fichier d'entrée via Dos2unix avant le traitement et je ne peux toujours pas vous débarrasser des caractères erronés. p>
Quelqu'un a-t-il des idées? P>
Merci beaucoup, P>
3 Réponses :
typique, après avoir combattu pendant environ 2 heures, je l'ai résolu dans les 5 minutes suivant la question de poser la question ..
$output =~ s/[\x0A\x0D]//g;
Gardez à l'esprit que cela retire toutes les instances des caractères \ r code> et \ n code> et non la chaîne \ r \ n code> (juste en cas d'incaser < code> \ r code> ou \ n code> pourrait être des valeurs valides dont vous avez besoin dans d'autres endroits)
$output =~ s/\s+\z//;
Quelques options:
1. Remplacez toutes les occurrences de CR / LF avec LF: $ SORTIE = ~ S / \ R \ N / \ N / G; #instead de \ r \ n peut vouloir utiliser \ 012 \ 015 code>
2. Supprimer tous les espaces suivants: Sortie = ~ S / \ S + $ //G; Code>
3. Slurp et Split: