Bonsoir, mon problème est le suivant,
j'ai un fichier "pdb" (par exemple ici 1J1H), dans lequel je dois remplacer l'avant dernier nombre
par une valeur identique pour chaque groupe d'atome. ex du fichier pdb :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
ATOM    943  N   ILE A  60      17.874  -3.630  -2.201  1.00  0.33           N  
ATOM    944  CA  ILE A  60      16.488  -3.129  -2.150  1.00  0.37           C  
ATOM    945  C   ILE A  60      16.156  -2.460  -3.476  1.00  0.48           C  
ATOM    946  O   ILE A  60      16.849  -1.587  -3.922  1.00  0.41           O  
ATOM    947  CB  ILE A  60      16.352  -2.155  -0.949  1.00  0.47           C  
ATOM    948  CG1 ILE A  60      16.726  -2.924   0.343  1.00  0.70           C  
ATOM    949  CG2 ILE A  60      14.896  -1.692  -0.855  1.00  0.48           C  
ATOM    950  CD1 ILE A  60      18.209  -3.320   0.323  1.00  1.71           C  
ATOM    951  H   ILE A  60      18.621  -3.002  -2.122  1.00  0.46           H  
ATOM    952  HA  ILE A  60      15.820  -3.967  -2.003  1.00  0.38           H  
ATOM    953  HB  ILE A  60      17.009  -1.273  -1.062  1.00  0.66           H  
ATOM    954 HG12 ILE A  60      16.533  -2.310   1.207  1.00  0.67           H  
ATOM    955 HG13 ILE A  60      16.129  -3.820   0.411  1.00  1.25           H  
ATOM    956 HG21 ILE A  60      14.860  -0.613  -0.863  1.00  0.76           H  
ATOM    957 HG22 ILE A  60      14.341  -2.077  -1.698  1.00  0.76           H  
ATOM    958 HG23 ILE A  60      14.460  -2.061   0.061  1.00  0.93           H  
ATOM    959 HD11 ILE A  60      18.647  -3.136   1.289  1.00  2.07           H  
ATOM    960 HD12 ILE A  60      18.295  -4.369   0.085  1.00  2.28           H  
ATOM    961 HD13 ILE A  60      18.730  -2.742  -0.422  1.00  1.89           H
c'est-à-dire ici ce qui précède la lettre de fin par le code se trouvant en dernière position du second fichier, et ce pour chaque groupe d'atome/
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
Y  A59 C  63   0.00
I  A60 E   3   0.00
A  A61 E  38  -5.63
Cependant, on code fonctionne pour environs 97% des lignes, mais pour les 3% restant déconne plus que trop
il m'inverse l'avant dernière valeur et la précédente, ou me remplace le nombre en seconde position par le nombre que je suis placer en avant dernier.

mon expression régulière est la suivante (dans une boucle qui détecte à quel groupe d'atome on se trouve via une expression régulière également)

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
if ($LINES[$j]=~/(^ATOM)\s+(\d+)\s+(\w+)\s+(\w{3})\s(\w)\s+(\d+)/) {
	$v=$6;
	if ($i == $v) {
		if ($LINES[$j]=~/(-?\d+\.\d+)\s+(\w)\s\s$/){
			$LINES[$j]=~s/$1/$val[$i+1]/;
		}
	}
}
je ne comprend pas ce qui cloche dans mes expressions...

une solution plus simple et moins propre serait de découper la chaine selon les espaces et de remplacer l'avant dernier, ca fonctionnerais, mais moins propre.

Pourriez-vous m'aider svp... ?

Merci ^^

PS : aussi si qqun connais une facons de bien aligner toutes les "colonnes", je suis preneur