Identifier caractère qui suit un "_" et ledéplacer
am33450
Messages postés
20
Date d'inscription
Statut
Membre
Dernière intervention
-
Utilisateur anonyme -
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 !
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:
- Identifier caractère qui suit un "_" et ledéplacer
- Caractère ascii - Guide
- Caractère spéciaux - Guide
- Caractere speciaux - Guide
- Comment savoir qui me suit sur facebook - Guide
- Caractere vide - Guide
2 réponses
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
La Regex est
(voir l'onglet Context pour le résultat)
La regex est
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
Pour extraire les isotopes
Exemple, voir l'onglet table
Après, tu énumères toutes les captures.
Pour chacune, il suffit de tester la longueur de $1,
([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
Ç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
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
Merci d'avance de tes conseils
Merci