Je cherche une expression régulière à utiliser dans VIM ou dans un script
PHP ou Perl :
j'ai un fichier qui contient ces données par ligne :
ligne n : ....;10/12/2003;MOT1; MOT2; MOT3;E;....
ligne n+1 : ....;11/08/2004;MOT1; MOT2 ;M;....
.
.
.
je souhaiterai obtenir :
ligne n : ....;10/12/2003;MOT1 MOT2 MOT3;E;....
ligne n+1 : ....;11/08/2004;MOT1 MOT2;M;....
.
.
.
En fait je veux juste virer les points virgules qui se trouvent dans les
champs qui se trouvent exactement circonscrit entre un champ de type
XX/XX/XXXX
et un champ avec une seule lettre E ou M .
Petite précision, il ya d'autre champ du type XX/XX/XXXX dans la ligne avant
celui qui délimite la zone de texte recherché.
En fait :
ligne n : ....;10/12/2003;MOT1; MOT2; MOT3;E;....
ligne n+1 : ....;11/08/2004;MOT1 MOT2;M;....
^
c'est le 11ème point virgule de la ligne
je ne pense pas que ca soit faisable en une seule RE
Kevin
-- Coders don't die... they just JMP without RET
P'tit Marcel
ligne n : ....;10/12/2003;MOT1; MOT2; MOT3;E;.... ligne n+1 : ....;11/08/2004;MOT1; MOT2 ;M;....
je souhaiterai obtenir : ligne n : ....;10/12/2003;MOT1 MOT2 MOT3;E;.... ligne n+1 : ....;11/08/2004;MOT1 MOT2;M;....
En fait je veux juste virer les points virgules qui se trouvent dans les champs qui se trouvent exactement circonscrit entre un champ de type XX/XX/XXXX et un champ avec une seule lettre E ou M . Petite précision, il ya d'autre champ du type XX/XX/XXXX dans la ligne avant celui qui délimite la zone de texte recherché.
ligne n : ....;10/12/2003;MOT1; MOT2; MOT3;E;....
ligne n+1 : ....;11/08/2004;MOT1; MOT2 ;M;....
je souhaiterai obtenir :
ligne n : ....;10/12/2003;MOT1 MOT2 MOT3;E;....
ligne n+1 : ....;11/08/2004;MOT1 MOT2;M;....
En fait je veux juste virer les points virgules qui se trouvent dans les
champs qui se trouvent exactement circonscrit entre un champ de type
XX/XX/XXXX et un champ avec une seule lettre E ou M .
Petite précision, il ya d'autre champ du type XX/XX/XXXX dans la ligne avant
celui qui délimite la zone de texte recherché.
ligne n : ....;10/12/2003;MOT1; MOT2; MOT3;E;.... ligne n+1 : ....;11/08/2004;MOT1; MOT2 ;M;....
je souhaiterai obtenir : ligne n : ....;10/12/2003;MOT1 MOT2 MOT3;E;.... ligne n+1 : ....;11/08/2004;MOT1 MOT2;M;....
En fait je veux juste virer les points virgules qui se trouvent dans les champs qui se trouvent exactement circonscrit entre un champ de type XX/XX/XXXX et un champ avec une seule lettre E ou M . Petite précision, il ya d'autre champ du type XX/XX/XXXX dans la ligne avant celui qui délimite la zone de texte recherché.
- remplacement de "; " par " " - remplacement de " ;" par ";"
Merci pour ta proposition, mais en fait il y a d'autres champs dans la ligne, que je ne souhaite pas modifier, et qui contiennent un espace avant et/ou après le point virgule :-(
Philippe
- remplacement de "; " par " "
- remplacement de " ;" par ";"
Merci pour ta proposition, mais en fait il y a d'autres champs dans la
ligne, que je ne souhaite pas modifier,
et qui contiennent un espace avant et/ou après le point virgule :-(
- remplacement de "; " par " " - remplacement de " ;" par ";"
Merci pour ta proposition, mais en fait il y a d'autres champs dans la ligne, que je ne souhaite pas modifier, et qui contiennent un espace avant et/ou après le point virgule :-(
On y est presque à part le fait qu'il peut y avoir soit E soit M, le problème est qu'il prend le premier champ date qu'il rencontre depuis le début de la ligne or il devrait prendre le champ date qui se trouve juste après le 11ème point virgule...
On y est presque à part le fait qu'il peut y avoir soit E soit M, le
problème est qu'il
prend le premier champ date qu'il rencontre depuis le début de la ligne or
il devrait
prendre le champ date qui se trouve juste après le 11ème point virgule...
On y est presque à part le fait qu'il peut y avoir soit E soit M, le problème est qu'il prend le premier champ date qu'il rencontre depuis le début de la ligne or il devrait prendre le champ date qui se trouve juste après le 11ème point virgule...
Même problème que la proposition précédente, il prend la première date qu'il rencontre :-(
Philippe
P'tit Marcel
il devrait prendre le champ date qui se trouve juste après le 11ème point virgule...
il aurait peut être fallu commencer par le préciser... en gros, si (i) est la position de la cellule "E", il faut fusionner les cellules de la 13° à la (i-1)°.
$masque='`^(.*;.*;.*;.*;.*;.*;.*;.*;.*;.*;.*;[0-9]{2}/[0-9]{2}/[0-9]{4};)(.+)(;E;.*)$`U'; ou $masque='`^(.*;.*;.*;.*;.*;.*;.*;.*;.*;.*;.*;.*;)(.+)(;E;.*)$`U';
cela dit, ton problème ne devrait pas se régler par expression régulière. La chaine constitue une suite ordonnée d'éléments et la solution est peut être du côté des fonctions de tableau :
un algo, c'est plus long à écrire mais plus simple à comprendre qu'une expression régulière.
eça -- P'tit Marcel
il devrait prendre le champ date qui se trouve juste après le 11ème
point virgule...
il aurait peut être fallu commencer par le préciser... en gros, si (i)
est la position de la cellule "E", il faut fusionner les cellules de la
13° à la (i-1)°.
$masque='`^(.*;.*;.*;.*;.*;.*;.*;.*;.*;.*;.*;[0-9]{2}/[0-9]{2}/[0-9]{4};)(.+)(;E;.*)$`U';
ou
$masque='`^(.*;.*;.*;.*;.*;.*;.*;.*;.*;.*;.*;.*;)(.+)(;E;.*)$`U';
cela dit, ton problème ne devrait pas se régler par expression
régulière. La chaine constitue une suite ordonnée d'éléments et la
solution est peut être du côté des fonctions de tableau :
il devrait prendre le champ date qui se trouve juste après le 11ème point virgule...
il aurait peut être fallu commencer par le préciser... en gros, si (i) est la position de la cellule "E", il faut fusionner les cellules de la 13° à la (i-1)°.
$masque='`^(.*;.*;.*;.*;.*;.*;.*;.*;.*;.*;.*;[0-9]{2}/[0-9]{2}/[0-9]{4};)(.+)(;E;.*)$`U'; ou $masque='`^(.*;.*;.*;.*;.*;.*;.*;.*;.*;.*;.*;.*;)(.+)(;E;.*)$`U';
cela dit, ton problème ne devrait pas se régler par expression régulière. La chaine constitue une suite ordonnée d'éléments et la solution est peut être du côté des fonctions de tableau :