J'essaie de trouver une meilleure solution pour faire un analyseur à certains des formats de fichiers célèbres tels que: EDIFACT et TRADACOMS .
Si vous n'êtes pas familier avec ces normes, consultez cet exemple de Wikipedia:
Voir ci-dessous pour un exemple de message EDIFACT utilisé pour répondre à une demande de disponibilité de produit: -
UNA:+.? '
UNB+IATB:1+6XPPC+LHPPC+940101:0950+1'
UNH+1+PAORES:93:1:IA'
MSG+1:45'
IFT+3+XYZCOMPANY AVAILABILITY'
ERC+A7V:1:AMD'
IFT+3+NO MORE FLIGHTS'
ODI'
TVL+240493:1000::1220+FRA+JFK+DL+400+C'
PDI++C:3+Y::3+F::1'
APD+714C:0:::6++++++6X'
TVL+240493:1740::2030+JFK+MIA+DL+081+C'
PDI++C:4'
APD+EM2:0:130::6+++++++DA'
UNT+13+1'
UNZ+1+1'
Le segment UNA est facultatif. S'il est présent, il spécifie les caractères spéciaux à utiliser pour interpréter le reste du message. Il y a six caractères suivant UNA dans cet ordre:
- séparateur d'éléments de données de composant (: dans cet exemple)
- séparateur d'éléments de données (+ dans cet exemple)
- notification décimale (. dans cet exemple)
- libérer le caractère (? dans cet exemple)
- réservé, doit être un espace
- terminateur de segment ('dans cet exemple)
Comme vous pouvez le voir, ce ne sont que des données formatées d'une manière spéciale qui attendent d'être analysées (un peu comme les fichiers XML ).
Maintenant, mon système est construit sur PHP et j'ai pu créer un analyseur utilisant des expressions régulières pour chaque segment, mais le problème n'est pas que tout le monde implémente parfaitement la norme.
Certains fournisseurs ont tendance à ignorer complètement les segments et champs facultatifs. D'autres peuvent choisir d'envoyer plus de données que d'autres. C'est pourquoi j'ai été obligé de créer des validateurs pour les segments et les champs pour tester si le fichier était correct ou non.
Vous pouvez imaginer le cauchemar des expressions régulières que j'ai en ce moment. De plus, chaque fournisseur a besoin de nombreuses modifications des expressions régulières que j'ai tendance à construire un analyseur pour chaque fournisseur.
Des questions:
1- Est-ce la meilleure pratique pour analyser des fichiers (en utilisant des expressions régulières)?
2- Existe-t-il une meilleure solution pour analyser les fichiers (peut-être existe-t-il une solution toute faite)? Sera-t-il capable de montrer quel segment est manquant ou si le fichier est corrompu?
3- Si je dois quand même construire mon analyseur, quel modèle de conception ou méthodologie dois-je utiliser?
Remarques:
J'ai lu quelque part sur yacc et ANTLR, mais je ne sais pas s'ils correspondent à mes besoins ou non!