J'ai un fichier de bibliographie au format bibtex o=F9
dans beaucoup d'entr=E9es le num=E9ro de volume est
indiqu=E9 par erreur dans le champ "number".
Je voudrais donc tester pour chaque entr=E9e si
le champ volume est renseign=E9, si ce n'est pas
le cas tester le champ number et le cas =E9ch=E9ant
supprimer number et modifier volume comme il
faut.
Auriez vous des pistes pour r=E9oudre mon probl=E8me ?
À (at) Mon, 05 Nov 2007 08:40:25 -0800, Gamotte nous disait (told us):
J'ai un fichier de bibliographie au format bibtex où dans beaucoup d'entrées le numéro de volume est indiqué par erreur dans le champ "number". Je voudrais donc tester pour chaque entrée si le champ volume est renseigné, si ce n'est pas le cas tester le champ number et le cas échéant supprimer number et modifier volume comme il faut. Auriez vous des pistes pour réoudre mon problème ?
moi, je ferai :
sed s/number/volume/g fichieravant > fichierapres
hope that'll help,
-- Thomas vO - <http://perso.enstimac.fr/~vanouden/>
bonjour,
À (at) Mon, 05 Nov 2007 08:40:25 -0800,
Gamotte <gamotte@hotmail.com> nous disait (told us):
J'ai un fichier de bibliographie au format bibtex où
dans beaucoup d'entrées le numéro de volume est
indiqué par erreur dans le champ "number".
Je voudrais donc tester pour chaque entrée si
le champ volume est renseigné, si ce n'est pas
le cas tester le champ number et le cas échéant
supprimer number et modifier volume comme il
faut.
Auriez vous des pistes pour réoudre mon problème ?
moi, je ferai :
sed s/number/volume/g fichieravant > fichierapres
hope that'll help,
--
Thomas vO - <http://perso.enstimac.fr/~vanouden/>
À (at) Mon, 05 Nov 2007 08:40:25 -0800, Gamotte nous disait (told us):
J'ai un fichier de bibliographie au format bibtex où dans beaucoup d'entrées le numéro de volume est indiqué par erreur dans le champ "number". Je voudrais donc tester pour chaque entrée si le champ volume est renseigné, si ce n'est pas le cas tester le champ number et le cas échéant supprimer number et modifier volume comme il faut. Auriez vous des pistes pour réoudre mon problème ?
moi, je ferai :
sed s/number/volume/g fichieravant > fichierapres
hope that'll help,
-- Thomas vO - <http://perso.enstimac.fr/~vanouden/>
Gamotte
On 5 nov, 17:58, Thomas vO <vanouden+ wrote:
bonjour,
À (at) Mon, 05 Nov 2007 08:40:25 -0800, Gamotte nous disait (told us):
J'ai un fichier de bibliographie au format bibtex où dans beaucoup d'entrées le numéro de volume est indiqué par erreur dans le champ "number". Je voudrais donc tester pour chaque entrée si le champ volume est renseigné, si ce n'est pas le cas tester le champ number et le cas échéant supprimer number et modifier volume comme il faut. Auriez vous des pistes pour réoudre mon problème ?
moi, je ferai :
sed s/number/volume/g fichieravant > fichierapres
hope that'll help,
Merci, mais pas vraiment puisque les entrées qui ont à la fois un number et un volume vont se retrouver avec deux champs contradictoires. Il faut vraiment procéder au cas par cas, mais je ne vois pas comment faire.
On 5 nov, 17:58, Thomas vO <vanouden+n...@rf.camitsne.invalid> wrote:
bonjour,
À (at) Mon, 05 Nov 2007 08:40:25 -0800,
Gamotte <gamo...@hotmail.com> nous disait (told us):
J'ai un fichier de bibliographie au format bibtex où
dans beaucoup d'entrées le numéro de volume est
indiqué par erreur dans le champ "number".
Je voudrais donc tester pour chaque entrée si
le champ volume est renseigné, si ce n'est pas
le cas tester le champ number et le cas échéant
supprimer number et modifier volume comme il
faut.
Auriez vous des pistes pour réoudre mon problème ?
moi, je ferai :
sed s/number/volume/g fichieravant > fichierapres
hope that'll help,
Merci, mais pas vraiment puisque les entrées qui ont à la fois
un number et un volume vont se retrouver avec deux champs
contradictoires. Il faut vraiment procéder au cas par cas, mais je
ne vois pas comment faire.
À (at) Mon, 05 Nov 2007 08:40:25 -0800, Gamotte nous disait (told us):
J'ai un fichier de bibliographie au format bibtex où dans beaucoup d'entrées le numéro de volume est indiqué par erreur dans le champ "number". Je voudrais donc tester pour chaque entrée si le champ volume est renseigné, si ce n'est pas le cas tester le champ number et le cas échéant supprimer number et modifier volume comme il faut. Auriez vous des pistes pour réoudre mon problème ?
moi, je ferai :
sed s/number/volume/g fichieravant > fichierapres
hope that'll help,
Merci, mais pas vraiment puisque les entrées qui ont à la fois un number et un volume vont se retrouver avec deux champs contradictoires. Il faut vraiment procéder au cas par cas, mais je ne vois pas comment faire.
Stephane Chazelas
2007-11-05, 09:08(-08), Gamotte:
On 5 nov, 17:58, Thomas vO <vanouden+ wrote:
bonjour,
À (at) Mon, 05 Nov 2007 08:40:25 -0800, Gamotte nous disait (told us):
J'ai un fichier de bibliographie au format bibtex où dans beaucoup d'entrées le numéro de volume est indiqué par erreur dans le champ "number". Je voudrais donc tester pour chaque entrée si le champ volume est renseigné, si ce n'est pas le cas tester le champ number et le cas échéant supprimer number et modifier volume comme il faut. Auriez vous des pistes pour réoudre mon problème ?
moi, je ferai :
sed s/number/volume/g fichieravant > fichierapres
hope that'll help,
Merci, mais pas vraiment puisque les entrées qui ont à la fois un number et un volume vont se retrouver avec deux champs contradictoires. Il faut vraiment procéder au cas par cas, mais je ne vois pas comment faire.
On 5 nov, 17:58, Thomas vO <vanouden+n...@rf.camitsne.invalid> wrote:
bonjour,
À (at) Mon, 05 Nov 2007 08:40:25 -0800,
Gamotte <gamo...@hotmail.com> nous disait (told us):
J'ai un fichier de bibliographie au format bibtex où
dans beaucoup d'entrées le numéro de volume est
indiqué par erreur dans le champ "number".
Je voudrais donc tester pour chaque entrée si
le champ volume est renseigné, si ce n'est pas
le cas tester le champ number et le cas échéant
supprimer number et modifier volume comme il
faut.
Auriez vous des pistes pour réoudre mon problème ?
moi, je ferai :
sed s/number/volume/g fichieravant > fichierapres
hope that'll help,
Merci, mais pas vraiment puisque les entrées qui ont à la fois
un number et un volume vont se retrouver avec deux champs
contradictoires. Il faut vraiment procéder au cas par cas, mais je
ne vois pas comment faire.
À (at) Mon, 05 Nov 2007 08:40:25 -0800, Gamotte nous disait (told us):
J'ai un fichier de bibliographie au format bibtex où dans beaucoup d'entrées le numéro de volume est indiqué par erreur dans le champ "number". Je voudrais donc tester pour chaque entrée si le champ volume est renseigné, si ce n'est pas le cas tester le champ number et le cas échéant supprimer number et modifier volume comme il faut. Auriez vous des pistes pour réoudre mon problème ?
moi, je ferai :
sed s/number/volume/g fichieravant > fichierapres
hope that'll help,
Merci, mais pas vraiment puisque les entrées qui ont à la fois un number et un volume vont se retrouver avec deux champs contradictoires. Il faut vraiment procéder au cas par cas, mais je ne vois pas comment faire.
Merci, mais pas vraiment puisque les entrées qui ont à la fois un number et un volume vont se retrouver avec deux champs contradictoires. Il faut vraiment procéder au cas par cas, mais je ne vois pas comment faire.
Je suis vraiment reconnaissant pour l'effort fourni, mais ca ne fonctionne malheureusement pas. Il ne reste qu'un seul number à la sortie alors que beaucoup d'entrées ont à la fois un number et un volume.
On 5 nov, 18:12, Stephane Chazelas <cette.adre...@est.invalid> wrote:
2007-11-05, 09:08(-08), Gamotte:
On 5 nov, 17:58, Thomas vO <vanouden+n...@rf.camitsne.invalid> wrote:
moi, je ferai :
sed s/number/volume/g fichieravant > fichierapres
hope that'll help,
Merci, mais pas vraiment puisque les entrées qui ont à la fois
un number et un volume vont se retrouver avec deux champs
contradictoires. Il faut vraiment procéder au cas par cas, mais je
ne vois pas comment faire.
Je suis vraiment reconnaissant pour l'effort fourni, mais
ca ne fonctionne malheureusement pas. Il ne reste qu'un seul
number à la sortie alors que beaucoup d'entrées ont à la fois
un number et un volume.
Merci, mais pas vraiment puisque les entrées qui ont à la fois un number et un volume vont se retrouver avec deux champs contradictoires. Il faut vraiment procéder au cas par cas, mais je ne vois pas comment faire.
Je suis vraiment reconnaissant pour l'effort fourni, mais ca ne fonctionne malheureusement pas. Il ne reste qu'un seul number à la sortie alors que beaucoup d'entrées ont à la fois un number et un volume.
Stephane Chazelas
2007-11-05, 09:31(-08), Gamotte:
On 5 nov, 18:12, Stephane Chazelas wrote:
2007-11-05, 09:08(-08), Gamotte:
On 5 nov, 17:58, Thomas vO <vanouden+ wrote:
moi, je ferai :
sed s/number/volume/g fichieravant > fichierapres
hope that'll help,
Merci, mais pas vraiment puisque les entrées qui ont à la fois un number et un volume vont se retrouver avec deux champs contradictoires. Il faut vraiment procéder au cas par cas, mais je ne vois pas comment faire.
Je suis vraiment reconnaissant pour l'effort fourni, mais ca ne fonctionne malheureusement pas. Il ne reste qu'un seul number à la sortie alors que beaucoup d'entrées ont à la fois un number et un volume.
On 5 nov, 18:12, Stephane Chazelas <cette.adre...@est.invalid> wrote:
2007-11-05, 09:08(-08), Gamotte:
On 5 nov, 17:58, Thomas vO <vanouden+n...@rf.camitsne.invalid> wrote:
moi, je ferai :
sed s/number/volume/g fichieravant > fichierapres
hope that'll help,
Merci, mais pas vraiment puisque les entrées qui ont à la fois
un number et un volume vont se retrouver avec deux champs
contradictoires. Il faut vraiment procéder au cas par cas, mais je
ne vois pas comment faire.
Je suis vraiment reconnaissant pour l'effort fourni, mais
ca ne fonctionne malheureusement pas. Il ne reste qu'un seul
number à la sortie alors que beaucoup d'entrées ont à la fois
un number et un volume.
Merci, mais pas vraiment puisque les entrées qui ont à la fois un number et un volume vont se retrouver avec deux champs contradictoires. Il faut vraiment procéder au cas par cas, mais je ne vois pas comment faire.
Je suis vraiment reconnaissant pour l'effort fourni, mais ca ne fonctionne malheureusement pas. Il ne reste qu'un seul number à la sortie alors que beaucoup d'entrées ont à la fois un number et un volume.
Merci, mais pas vraiment puisque les entrées qui ont à la fois un number et un volume vont se retrouver avec deux champs contradictoires. Il faut vraiment procéder au cas par cas, mais je ne vois pas comment faire.
Je suis vraiment reconnaissant pour l'effort fourni, mais ca ne fonctionne malheureusement pas. Il ne reste qu'un seul number à la sortie alors que beaucoup d'entrées ont à la fois un number et un volume.
On 5 nov, 18:52, Stephane Chazelas <cette.adre...@est.invalid> wrote:
2007-11-05, 09:31(-08), Gamotte:
On 5 nov, 18:12, Stephane Chazelas <cette.adre...@est.invalid> wrote:
2007-11-05, 09:08(-08), Gamotte:
On 5 nov, 17:58, Thomas vO <vanouden+n...@rf.camitsne.invalid> wrote:
moi, je ferai :
sed s/number/volume/g fichieravant > fichierapres
hope that'll help,
Merci, mais pas vraiment puisque les entrées qui ont à la fois
un number et un volume vont se retrouver avec deux champs
contradictoires. Il faut vraiment procéder au cas par cas, mais je
ne vois pas comment faire.
Je suis vraiment reconnaissant pour l'effort fourni, mais
ca ne fonctionne malheureusement pas. Il ne reste qu'un seul
number à la sortie alors que beaucoup d'entrées ont à la fois
un number et un volume.
Merci, mais pas vraiment puisque les entrées qui ont à la fois un number et un volume vont se retrouver avec deux champs contradictoires. Il faut vraiment procéder au cas par cas, mais je ne vois pas comment faire.
Je suis vraiment reconnaissant pour l'effort fourni, mais ca ne fonctionne malheureusement pas. Il ne reste qu'un seul number à la sortie alors que beaucoup d'entrées ont à la fois un number et un volume.
Bon, alors j'ai essayé de décortiquer cette commande. Voila ce que ca donne. Merci pour tout complément ou correction.
*) perl -0777 -pe ' -0777 : traite le fichier entier comme une seule ligne -pe : exécute le script donné en argument pour chaque ligne entrée
*) s{regexp}{expression}gse : substitution de toutes les sous-chaîne "matchant" regexp par le résultat de l'expression. Le s de /gse implique que . remplace n'importe quel caractère y compris n.
*) $r = $&; $r contient la chaîne reconnue, ici une entrée bibtex du @ initial jusqu'à l'accolade fermante finale.
*) $r =~ s/(s)number(s*=)/${1}volume${2}/ if ($r =~ /snumbers*=/ && $r !~ /svolumes*=/); Dans l'entrée bibtex courante, remplacer "number =" par "volume =" (en conservant le mêmes caractères blancs) uniquement si l'entrée en question contient un number mais pas de volume.
*) $r : afficher l'entrée traitée.
*) Reste l'expression régulière elle-même @w+s*{(?:#.*?n|"(?:"|.)*?"|.)*?}
@w+s* : un @ suivi d'une ou plusieurs (intérêt du + ?) chaîne alphanumérique (avec ou sans _), éventuellement de blancs puis de (?:#.*?n|"(?: "|.)*?"|.)*? entre accolades. ?: : les parenthèses ne servent qu'à grouper mais pas à référ encer les éléments entourés #.*?n : je ne vois pas le sens du #. Littéral ou notation de Perl ? "(?:"|.)*?" : une chaîne entre guillemets pouvant contenir " . : n'importe quel caractère
A vrai dire, je ne comprends pas bien (?:#.*?n|"(?: "|.)*?"|.)*? dans son ensemble.
On 5 nov, 18:52, Stephane Chazelas <cette.adre...@est.invalid> wrote:
Bon, alors j'ai essayé de décortiquer cette commande. Voila ce que ca
donne.
Merci pour tout complément ou correction.
*) perl -0777 -pe '
-0777 : traite le fichier entier comme une seule ligne
-pe : exécute le script donné en argument pour chaque ligne entrée
*) s{regexp}{expression}gse :
substitution de toutes les sous-chaîne "matchant" regexp par le
résultat de
l'expression. Le s de /gse implique que . remplace n'importe quel
caractère
y compris n.
*) $r = $&;
$r contient la chaîne reconnue, ici une entrée bibtex du @ initial
jusqu'à l'accolade fermante finale.
*) $r =~ s/(s)number(s*=)/${1}volume${2}/
if ($r =~ /snumbers*=/ && $r !~ /svolumes*=/);
Dans l'entrée bibtex courante, remplacer "number =" par "volume
=" (en conservant
le mêmes caractères blancs) uniquement si l'entrée en question
contient un number
mais pas de volume.
*) $r : afficher l'entrée traitée.
*) Reste l'expression régulière elle-même
@w+s*{(?:#.*?n|"(?:\"|.)*?"|.)*?}
@w+s* : un @ suivi d'une ou plusieurs (intérêt du + ?) chaîne
alphanumérique (avec
ou sans _), éventuellement de blancs puis de (?:#.*?n|"(?:
"|.)*?"|.)*? entre
accolades.
?: : les parenthèses ne servent qu'à grouper mais pas à référ encer
les éléments entourés
#.*?n : je ne vois pas le sens du #. Littéral ou notation de
Perl ?
"(?:\"|.)*?" : une chaîne entre guillemets pouvant contenir "
. : n'importe quel caractère
A vrai dire, je ne comprends pas bien (?:#.*?n|"(?:
"|.)*?"|.)*? dans son ensemble.
Bon, alors j'ai essayé de décortiquer cette commande. Voila ce que ca donne. Merci pour tout complément ou correction.
*) perl -0777 -pe ' -0777 : traite le fichier entier comme une seule ligne -pe : exécute le script donné en argument pour chaque ligne entrée
*) s{regexp}{expression}gse : substitution de toutes les sous-chaîne "matchant" regexp par le résultat de l'expression. Le s de /gse implique que . remplace n'importe quel caractère y compris n.
*) $r = $&; $r contient la chaîne reconnue, ici une entrée bibtex du @ initial jusqu'à l'accolade fermante finale.
*) $r =~ s/(s)number(s*=)/${1}volume${2}/ if ($r =~ /snumbers*=/ && $r !~ /svolumes*=/); Dans l'entrée bibtex courante, remplacer "number =" par "volume =" (en conservant le mêmes caractères blancs) uniquement si l'entrée en question contient un number mais pas de volume.
*) $r : afficher l'entrée traitée.
*) Reste l'expression régulière elle-même @w+s*{(?:#.*?n|"(?:"|.)*?"|.)*?}
@w+s* : un @ suivi d'une ou plusieurs (intérêt du + ?) chaîne alphanumérique (avec ou sans _), éventuellement de blancs puis de (?:#.*?n|"(?: "|.)*?"|.)*? entre accolades. ?: : les parenthèses ne servent qu'à grouper mais pas à référ encer les éléments entourés #.*?n : je ne vois pas le sens du #. Littéral ou notation de Perl ? "(?:"|.)*?" : une chaîne entre guillemets pouvant contenir " . : n'importe quel caractère
A vrai dire, je ne comprends pas bien (?:#.*?n|"(?: "|.)*?"|.)*? dans son ensemble.
Stephane Chazelas
2007-11-06, 02:39(-08), Gamotte: [...]
*) Reste l'expression régulière elle-même @w+s*{(?:#.*?n|"(?:"|.)*?"|.)*?}
@w+s* : un @ suivi d'une ou plusieurs (intérêt du + ?) chaîne alphanumérique (avec ou sans _), éventuellement de blancs puis de (?:#.*?n|"(?: "|.)*?"|.)*? entre accolades. ?: : les parenthèses ne servent qu'à grouper mais pas à référencer les éléments entourés #.*?n : je ne vois pas le sens du #. Littéral ou notation de Perl ? "(?:"|.)*?" : une chaîne entre guillemets pouvant contenir " . : n'importe quel caractère
A vrai dire, je ne comprends pas bien (?:#.*?n|"(?: "|.)*?"|.)*? dans son ensemble. [...]
L'idee est de matcher les trucs qui peuvent legalement contenir un "}" sans que celui-ci ne soit pas le } fermant de @TRUC{, comme dans:
*) Reste l'expression régulière elle-même
@w+s*{(?:#.*?n|"(?:\"|.)*?"|.)*?}
@w+s* : un @ suivi d'une ou plusieurs (intérêt du + ?) chaîne
alphanumérique (avec
ou sans _), éventuellement de blancs puis de (?:#.*?n|"(?:
"|.)*?"|.)*? entre
accolades.
?: : les parenthèses ne servent qu'à grouper mais pas à référencer
les éléments entourés
#.*?n : je ne vois pas le sens du #. Littéral ou notation de
Perl ?
"(?:\"|.)*?" : une chaîne entre guillemets pouvant contenir "
. : n'importe quel caractère
A vrai dire, je ne comprends pas bien (?:#.*?n|"(?:
"|.)*?"|.)*? dans son ensemble.
[...]
L'idee est de matcher les trucs qui peuvent legalement contenir
un "}" sans que celui-ci ne soit pas le } fermant de @TRUC{,
comme dans:
*) Reste l'expression régulière elle-même @w+s*{(?:#.*?n|"(?:"|.)*?"|.)*?}
@w+s* : un @ suivi d'une ou plusieurs (intérêt du + ?) chaîne alphanumérique (avec ou sans _), éventuellement de blancs puis de (?:#.*?n|"(?: "|.)*?"|.)*? entre accolades. ?: : les parenthèses ne servent qu'à grouper mais pas à référencer les éléments entourés #.*?n : je ne vois pas le sens du #. Littéral ou notation de Perl ? "(?:"|.)*?" : une chaîne entre guillemets pouvant contenir " . : n'importe quel caractère
A vrai dire, je ne comprends pas bien (?:#.*?n|"(?: "|.)*?"|.)*? dans son ensemble. [...]
L'idee est de matcher les trucs qui peuvent legalement contenir un "}" sans que celui-ci ne soit pas le } fermant de @TRUC{, comme dans:
Tout d'abord je vous remercie tous les deux. N'ayant jamais fait de Perl de ma vie, l'explication de texte de Gamotte faite sur le programme de Stéphane m'a donné envie de m'y mettre vraiment. Il me reste encore une question pour Stéphane à propos de l'expression régulière/
(?:#.*?n|"(?:"|.)*?"|.)*? dans son ensemble.
L'idee est de matcher les trucs qui peuvent legalement contenir un "}" sans que celui-ci ne soit pas le } fermant de @TRUC{, comme dans:
Je comprendrais bien si le dernier « . » de l'expression était remplacé par « [^#"] ». Mais là, vu que toutes les répétitions sont rendues « non gourmandes » (par *?), je ne vois pas ce qui assure qu'un # ne sera pas associé au . plutôt qu'à l'expression « #.*?n ».
Par exemple dans : @x{#}... plein plein de choses y compris quelques n... }
Tout d'abord je vous remercie tous les deux. N'ayant jamais fait de Perl
de ma vie, l'explication de texte de Gamotte faite sur le programme de
Stéphane m'a donné envie de m'y mettre vraiment. Il me reste encore une
question pour Stéphane à propos de l'expression régulière/
(?:#.*?n|"(?:\"|.)*?"|.)*? dans son ensemble.
L'idee est de matcher les trucs qui peuvent legalement contenir
un "}" sans que celui-ci ne soit pas le } fermant de @TRUC{,
comme dans:
Je comprendrais bien si le dernier « . » de l'expression était remplacé
par « [^#"] ». Mais là, vu que toutes les répétitions sont rendues « non
gourmandes » (par *?), je ne vois pas ce qui assure qu'un # ne sera pas
associé au . plutôt qu'à l'expression « #.*?n ».
Par exemple dans :
@x{#}... plein plein de choses y compris quelques n... }
Tout d'abord je vous remercie tous les deux. N'ayant jamais fait de Perl de ma vie, l'explication de texte de Gamotte faite sur le programme de Stéphane m'a donné envie de m'y mettre vraiment. Il me reste encore une question pour Stéphane à propos de l'expression régulière/
(?:#.*?n|"(?:"|.)*?"|.)*? dans son ensemble.
L'idee est de matcher les trucs qui peuvent legalement contenir un "}" sans que celui-ci ne soit pas le } fermant de @TRUC{, comme dans:
Je comprendrais bien si le dernier « . » de l'expression était remplacé par « [^#"] ». Mais là, vu que toutes les répétitions sont rendues « non gourmandes » (par *?), je ne vois pas ce qui assure qu'un # ne sera pas associé au . plutôt qu'à l'expression « #.*?n ».
Par exemple dans : @x{#}... plein plein de choses y compris quelques n... }