J'essaie d'apprendre C#, venant d'un fond Python/PHP, et j'essaie de porter un script de Python pour commencer.
Le script lit un fichier texte ligne par ligne (environ 150K lignes), applique une liste de regex jusqu'à ce qu'il y ait une correspondance, obtient les résultats des groupes nommés et ajoute les valeurs comme propriétés d'une classe.
Voici à quoi ressemblent les données (chaque ligne commençant par 'No.' est le début d'un nouvel enregistrement) :
No.813177294 09/01/1987 150
Tit.INCAL INDÚSTRIA DE CALÇADOS LTDA (BR/PE)
\*PARÁGRAFO ÚNICO DO ART. 162 DA LPI.
Procurador: ROBERTO C. FREIRE
No.901699870 02/06/2009 LD6
\*Exigência Formal não respondida, Pedido de Registro de Marca considerado inexistente, de acordo com o Art. 157 da LPI
No.830009817 12/12/2008 003
Tit.BIOLAB SANUS FARMACÊUTICA LTDA. (BR/SP)
C.N.P.J./C.I.C./NºINPI : 49475833000106
Apres.: Nominativa ; Nat.: De Produto
Marca: ENXUG
NCL(9) 05 medicamentos para uso humano; preparações farmacêuticas; diuréticos, analgésicos;
anestésicos; anti-helmínticos; antibióticos; hormônios para uso medicinal.
Procurador: CRUZEIRO/NEWMARC PATENTES E MARCAS LTDA
Et à quoi ressemble la regex :
regexp = {
# No.123456789 13/12/2008 560
# No.123456789 13/12/2008 560
# No.123456789 13/12/2008 560
# No.123456789 560
'number': re.compile(r'No.(?P<Number>[\d]{9}) +((?P<Date>[\d]{2}/[\d]{2}/[\d]{4}) +)?(?P<Code>.*)'),
# NCL(7) 25 no no no no no ; no no no no no no; *nonono no non o nono
# NCL(9) 25 no no no no no ; no no no no no no; *nonono no non o nono
'ncl': re.compile(r'NCL\([\d]{1}\) (?P<Ncl>[\d]{2})( (?P<Especification>.*))?'),
'doc': re.compile(r'C.N.P.J./C.I.C./NºINPI : (?P<Document>.*)'),
'description': re.compile(r'\*(?P<Description>.*)'),
...
}
Maintenant mes questions :
1) Puis-je utiliser le même concept, en appliquant chacun d'un Dictionary<string, Regex>
dans chaque ligne jusqu'à ce qu'il y ait une correspondance ?
2) Si je le fais, il y a un moyen d'obtenir un Dictionary<string, string>
des résultats des groupes nommés ? (À ce stade, je peux tout traiter comme une chaîne de caractères).
3) Si je devais avoir une classe comme celle-ci...
class Record
{
public string Number { get; set; }
public string Date { get; set; }
public string Code { get; set; }
public string Ncl { get; set; }
public string Especification { get; set; }
public string Document { get; set; }
public string Description { get; set; }
}
...il existe un moyen de définir les propriétés avec les valeurs des groupes nommés ?
4) Je ne comprends pas du tout ce qui se passe ici, essayer de coder dans un langage à typage statique tout en pensant dans un langage à typage dynamique ? Si c'est le cas, que puis-je faire ?
Désolé pour cette question un peu longue. J'ai vraiment essayé de la reprendre pour la rendre plus courte :-)
Merci d'avance.