Identifier caractère qui suit un "_" et ledéplacer

am33450 Messages postés 20 Date d'inscription   Statut Membre Dernière intervention   -  
 Utilisateur anonyme -
Bonjour à tous !

Nouveau en Perl, je rencontre une petite difficulté. Dans un fichier texte, je voudrais faire la modification suivante :

Lorsqu'en lisant le fichier lignes par lignes je tombe sur un underscore ("_") je voudrais faire une boucle permettant d'analyser le caractère qui se situe à droite du "_". Si c'est une lettre, le déplacer sur la position où se trouvait l'underscore en laissant un espace à l'ancienne place de cette lettre. Si c'est un chiffre, simplement remplacer cet underscore par un espace.

Petit exemple, je voudrais que :
_H__1 CU_71
me donne :
H 1 CU 71

Connaissez-vous une fonction permettant d'analyser le type de caractère se trouvant à la droite d'un autre ?

Meci d'avance !
A voir également:

2 réponses

Utilisateur anonyme
 
Bonjour

regarde du coté des Regex, je ne sais pas si ça s'implémente en Perl, mais c'est un outil "universel" donc je pense que oui.

Petits exemples
http://regexstorm.net/tester?p=%28_%29%2b%28%3f%3d%5bA-Za-z%5d%29&i=Supprime+tout+_+avant+une+lettre%0d%0a_H__1+CU_71+___e+_Z&r=

La Regex est
(_)+(?=[A-Za-z])
et on remplace par du vide
(voir l'onglet Context pour le résultat)

http://regexstorm.net/tester?p=%28_%29%2b%28%3f%3d%5b0-9%5d%29&i=Supprime+tout+_+avant+une+lettre%0d%0a_H__1+CU_71+___e+_Z&r=+

La regex est
(_)+(?=[0-9])
et on remplace par l'espace


1
am33450 Messages postés 20 Date d'inscription   Statut Membre Dernière intervention  
 
Merci Whismeril !

Ça marche bien à part pour les isotopes dont le nom ne contient qu'une seule lettre (il y a un petit décalage, il manque juste un espace en plus entre la lettre et le numéro atomique).

Pour l'instant, je copie toute la ligne quand je tombe sur une telle chaîne, sais-tu comment je pourrais récupérer seulement les chaînes ?

Merci d'avance
0
am33450 Messages postés 20 Date d'inscription   Statut Membre Dernière intervention  
 
Par exemple,
lorsque j'ai une ligne comme ça dans le fichier 1 :
eg CU_72 1.0045782E9
eg CU_73 1.0293612E9

J'aimerai obtenir dans un fichier 2 :
CU 72
CU 73
0
Utilisateur anonyme
 
Je n’arrive pas à comprendre ton exemple de 13:48 par rapport à la demande de 12:52, c’est 2 cas différents?
0
am33450 Messages postés 20 Date d'inscription   Statut Membre Dernière intervention  
 
Non non c'était juste pour illustrer ce que j'ai expliquer à 12:52. C'est bien les mêmes cas. Mon problème est de savoir comment copier seulement une chaîne de caractère qui m’intéresse et non pas toute une ligne comme mon programme le fait pour l'instant.

Merci d'avance de tes conseils
0
Utilisateur anonyme
 
Afin de répondre au mieux, peux tu me donner les cas que tu trouves avec les sorties attendues de façon la plus exhaustive possible?
Merci
0
Utilisateur anonyme
 
Pour extraire les isotopes
([A-Z]{1,2})(( *)|(_*))(\d+[A-Z]?)

Exemple, voir l'onglet table
http://regexstorm.net/tester?p=%28%5bA-Z%5d%7b1%2c2%7d%29%28%28+*%29%7c%28_*%29%29%28%5cd%2b%5bA-Z%5d%3f%29&i=H+3+C+14+TH233+U239+NP236F+NP236M+AM242M+CM243+%0d%0aBK246+BK250+CF251+CF253+TL207M+FR224+CF246+CU+71+%0d%0a%0d%0a_H__3+1.0392E%2b13+0.0000E%2b00+1.0392E%2b13+%0d%0a_C_14+2.6451E%2b08+0.0000E%2b00+2.6451E%2b08+


Après, tu énumères toutes les captures.
Pour chacune, il suffit de tester la longueur de $1,
  • si c'est 1 tu exportes $1 $2
  • si c'est 2 tu exportes $1$2


0