inserer des caractères à une place bien précise dans un document
16 réponses
philippe
Bonjour,
je ne connais pas grand chose à perl mais je pense que vous pourriez
résoudre mon problème.
je dois modifier un fichier texte pour incorporer des donnees dans une base
de données.
il y a 100000 lignes d'où la nécessité d'un script.
il faut creer une copie d'un document texte.txt et y rajouter des 'simple
quotes' (en dessous du 4) :
- après la 4eme virgule,
- avant la 5eme virgule,
- apres la 13eme virgule,
- avant la 14eme virgule.
je ne connais pas grand chose à perl mais je pense que vous pourriez résoudre mon problème.
je dois modifier un fichier texte pour incorporer des donnees dans une base de données.
il y a 100000 lignes d'où la nécessité d'un script.
il faut creer une copie d'un document texte.txt et y rajouter des 'simple quotes' (en dessous du 4) : - après la 4eme virgule, - avant la 5eme virgule, - apres la 13eme virgule, - avant la 14eme virgule.
# la sauvegarde, porte le suffixe .bat # utilisation : ./script.pl texte.txt
--- There's ore than one way to do it
Bonjour,
je ne connais pas grand chose à perl mais je pense que vous pourriez
résoudre mon problème.
je dois modifier un fichier texte pour incorporer des donnees dans une base
de données.
il y a 100000 lignes d'où la nécessité d'un script.
il faut creer une copie d'un document texte.txt et y rajouter des 'simple
quotes' (en dessous du 4) :
- après la 4eme virgule,
- avant la 5eme virgule,
- apres la 13eme virgule,
- avant la 14eme virgule.
je ne connais pas grand chose à perl mais je pense que vous pourriez résoudre mon problème.
je dois modifier un fichier texte pour incorporer des donnees dans une base de données.
il y a 100000 lignes d'où la nécessité d'un script.
il faut creer une copie d'un document texte.txt et y rajouter des 'simple quotes' (en dessous du 4) : - après la 4eme virgule, - avant la 5eme virgule, - apres la 13eme virgule, - avant la 14eme virgule.
# la sauvegarde, porte le suffixe .bat # utilisation : ./script.pl texte.txt
--- There's ore than one way to do it
Jérémy JUST
On Wed, 22 Dec 2004 22:23:09 +0100 philippe wrote:
il faut creer une copie d'un document texte.txt
local $/ ; open(TEXT, 'texte.txt') or die "Cannot open: $!n" ; my $text = <TEXT> ;
J'ai maintenant une copie du fichier entier dans $text.
et y rajouter des 'simple quotes' (en dessous du 4) :
Moi, sous le 4, je n'ai rien, et au-dessus, j'ai $, mais c'est un détail. J'imagine que tu parles des simples quotes qui sont juste sous les doubles, à gauche de la touche entrée? ;)
- après la 4eme virgule, - avant la 5eme virgule, - apres la 13eme virgule, - avant la 14eme virgule.
Je découpe le texte au niveau des virgules, et je mets les bouts dans une liste.
my @t = split ',', $text ;
Je n'ai plus qu'à modifier cette liste comme je veux, en pensant que la virgule n°N est entre l'élément N-1 et N. qq{} est équivalent aux quotes doubles, mais ici, je le trouve plus lisible:
$t[4] = qq{'$t[4]} ; # après la 4eme virgule, $t[4] = qq{$t[4]'} ; # avant la 5eme virgule, $t[13] = qq{'$t[13]} ; # apres la 13eme virgule, $t[13] = qq{$t[13]'} ; # avant la 14eme virgule.
Une fois que c'est écrit comme ça, on s'aperçoit que tu voulais juste mettre entre quotes le 5e et le 14e élément. Formulé ainsi, c'est plus simple à comprendre et je n'aurais peut-être pas écrit le programme comme je l'ai fait. Enfin, maintenant que c'est écrit...
Puis j'affiche tous les éléments de la liste @t, en mettant des virgules entre:
print STDOUT join ',', @t ;
Et hop!
Bon, le code est fourni sans garantie de fonctionnement, hein.
-- Jérémy JUST
On Wed, 22 Dec 2004 22:23:09 +0100
philippe <linux@rousselot.org> wrote:
il faut creer une copie d'un document texte.txt
local $/ ;
open(TEXT, 'texte.txt') or die "Cannot open: $!n" ;
my $text = <TEXT> ;
J'ai maintenant une copie du fichier entier dans $text.
et y rajouter des 'simple quotes' (en dessous du 4) :
Moi, sous le 4, je n'ai rien, et au-dessus, j'ai $, mais c'est un
détail. J'imagine que tu parles des simples quotes qui sont juste sous
les doubles, à gauche de la touche entrée? ;)
- après la 4eme virgule,
- avant la 5eme virgule,
- apres la 13eme virgule,
- avant la 14eme virgule.
Je découpe le texte au niveau des virgules, et je mets les bouts dans
une liste.
my @t = split ',', $text ;
Je n'ai plus qu'à modifier cette liste comme je veux, en pensant que
la virgule n°N est entre l'élément N-1 et N. qq{} est équivalent aux
quotes doubles, mais ici, je le trouve plus lisible:
$t[4] = qq{'$t[4]} ; # après la 4eme virgule,
$t[4] = qq{$t[4]'} ; # avant la 5eme virgule,
$t[13] = qq{'$t[13]} ; # apres la 13eme virgule,
$t[13] = qq{$t[13]'} ; # avant la 14eme virgule.
Une fois que c'est écrit comme ça, on s'aperçoit que tu voulais juste
mettre entre quotes le 5e et le 14e élément. Formulé ainsi, c'est plus
simple à comprendre et je n'aurais peut-être pas écrit le programme
comme je l'ai fait. Enfin, maintenant que c'est écrit...
Puis j'affiche tous les éléments de la liste @t, en mettant des
virgules entre:
print STDOUT join ',', @t ;
Et hop!
Bon, le code est fourni sans garantie de fonctionnement, hein.
On Wed, 22 Dec 2004 22:23:09 +0100 philippe wrote:
il faut creer une copie d'un document texte.txt
local $/ ; open(TEXT, 'texte.txt') or die "Cannot open: $!n" ; my $text = <TEXT> ;
J'ai maintenant une copie du fichier entier dans $text.
et y rajouter des 'simple quotes' (en dessous du 4) :
Moi, sous le 4, je n'ai rien, et au-dessus, j'ai $, mais c'est un détail. J'imagine que tu parles des simples quotes qui sont juste sous les doubles, à gauche de la touche entrée? ;)
- après la 4eme virgule, - avant la 5eme virgule, - apres la 13eme virgule, - avant la 14eme virgule.
Je découpe le texte au niveau des virgules, et je mets les bouts dans une liste.
my @t = split ',', $text ;
Je n'ai plus qu'à modifier cette liste comme je veux, en pensant que la virgule n°N est entre l'élément N-1 et N. qq{} est équivalent aux quotes doubles, mais ici, je le trouve plus lisible:
$t[4] = qq{'$t[4]} ; # après la 4eme virgule, $t[4] = qq{$t[4]'} ; # avant la 5eme virgule, $t[13] = qq{'$t[13]} ; # apres la 13eme virgule, $t[13] = qq{$t[13]'} ; # avant la 14eme virgule.
Une fois que c'est écrit comme ça, on s'aperçoit que tu voulais juste mettre entre quotes le 5e et le 14e élément. Formulé ainsi, c'est plus simple à comprendre et je n'aurais peut-être pas écrit le programme comme je l'ai fait. Enfin, maintenant que c'est écrit...
Puis j'affiche tous les éléments de la liste @t, en mettant des virgules entre:
print STDOUT join ',', @t ;
Et hop!
Bon, le code est fourni sans garantie de fonctionnement, hein.
-- Jérémy JUST
philippe
Jérémy JUST wrote:
On Wed, 22 Dec 2004 22:23:09 +0100 philippe wrote:
il faut creer une copie d'un document texte.txt
local $/ ; open(TEXT, 'texte.txt') or die "Cannot open: $!n" ; my $text = <TEXT> ;
J'ai maintenant une copie du fichier entier dans $text.
et y rajouter des 'simple quotes' (en dessous du 4) :
Moi, sous le 4, je n'ai rien, et au-dessus, j'ai $, mais c'est un détail. J'imagine que tu parles des simples quotes qui sont juste sous les doubles, à gauche de la touche entrée? ;)
- après la 4eme virgule, - avant la 5eme virgule, - apres la 13eme virgule, - avant la 14eme virgule.
Je découpe le texte au niveau des virgules, et je mets les bouts dans une liste.
my @t = split ',', $text ;
Je n'ai plus qu'à modifier cette liste comme je veux, en pensant que la virgule n°N est entre l'élément N-1 et N. qq{} est équivalent aux quotes doubles, mais ici, je le trouve plus lisible:
$t[4] = qq{'$t[4]} ; # après la 4eme virgule, $t[4] = qq{$t[4]'} ; # avant la 5eme virgule, $t[13] = qq{'$t[13]} ; # apres la 13eme virgule, $t[13] = qq{$t[13]'} ; # avant la 14eme virgule.
Une fois que c'est écrit comme ça, on s'aperçoit que tu voulais juste mettre entre quotes le 5e et le 14e élément. Formulé ainsi, c'est plus simple à comprendre et je n'aurais peut-être pas écrit le programme comme je l'ai fait. Enfin, maintenant que c'est écrit...
Puis j'affiche tous les éléments de la liste @t, en mettant des virgules entre:
print STDOUT join ',', @t ;
Et hop!
Bon, le code est fourni sans garantie de fonctionnement, hein.
Merci Xavier et Jérémie,
Je pense que ces bonnes choses de Noël ont quelque peu obscurci mon esprit.
mon fichier test est test2.txt ~~~~ a,z,e,r,t,y,u,i,o,p,q,s,d,f,g,h,j,k,l,m,w,x,c,v,b,n,0 a,z,e,r,t,y,u,i,o,p,q,s,d,f,g,h,j,k,l,m,w,x,c,v,b,n,0 a,z,e,r,t,y,u,i,o,p,q,s,d,f,g,h,j,k,l,m,w,x,c,v,b,n,0 a,z,e,r,t,y,u,i,o,p,q,s,d,f,g,h,j,k,l,m,w,x,c,v,b,n,0 ~~~~
mais pas de modification du fichier ou de fichier .bat
d'après les indication de Jérémis j'ai :
#!/usr/bin/perl local $/ ; open(TEXT, 'test2.txt') or die "Cannot open: $!n" ; my $text = <TEXT> ; my @t = split ',', $text ; $t[4]| | =| qq{'$t[4]}| | ; $t[4]| | =| qq{$t[5]'}| | ;| $t[13] = qq{'$t[13]} ;| $t[13] = qq{$t[14]'} ;| print STDOUT join ',', @t ;
et j'obtiens pour réponse : [ atc_output]$ ./script Unrecognized character xA0 at ./script line 6. [ atc_output]$
auriez vous une petite idée ?
Merci d'avance
Philippe
Jérémy JUST wrote:
On Wed, 22 Dec 2004 22:23:09 +0100
philippe <linux@rousselot.org> wrote:
il faut creer une copie d'un document texte.txt
local $/ ;
open(TEXT, 'texte.txt') or die "Cannot open: $!n" ;
my $text = <TEXT> ;
J'ai maintenant une copie du fichier entier dans $text.
et y rajouter des 'simple quotes' (en dessous du 4) :
Moi, sous le 4, je n'ai rien, et au-dessus, j'ai $, mais c'est un
détail. J'imagine que tu parles des simples quotes qui sont juste sous
les doubles, à gauche de la touche entrée? ;)
- après la 4eme virgule,
- avant la 5eme virgule,
- apres la 13eme virgule,
- avant la 14eme virgule.
Je découpe le texte au niveau des virgules, et je mets les bouts dans
une liste.
my @t = split ',', $text ;
Je n'ai plus qu'à modifier cette liste comme je veux, en pensant que
la virgule n°N est entre l'élément N-1 et N. qq{} est équivalent aux
quotes doubles, mais ici, je le trouve plus lisible:
$t[4] = qq{'$t[4]} ; # après la 4eme virgule,
$t[4] = qq{$t[4]'} ; # avant la 5eme virgule,
$t[13] = qq{'$t[13]} ; # apres la 13eme virgule,
$t[13] = qq{$t[13]'} ; # avant la 14eme virgule.
Une fois que c'est écrit comme ça, on s'aperçoit que tu voulais juste
mettre entre quotes le 5e et le 14e élément. Formulé ainsi, c'est plus
simple à comprendre et je n'aurais peut-être pas écrit le programme
comme je l'ai fait. Enfin, maintenant que c'est écrit...
Puis j'affiche tous les éléments de la liste @t, en mettant des
virgules entre:
print STDOUT join ',', @t ;
Et hop!
Bon, le code est fourni sans garantie de fonctionnement, hein.
Merci Xavier et Jérémie,
Je pense que ces bonnes choses de Noël ont quelque peu obscurci mon esprit.
mon fichier test est test2.txt
~~~~
a,z,e,r,t,y,u,i,o,p,q,s,d,f,g,h,j,k,l,m,w,x,c,v,b,n,0
a,z,e,r,t,y,u,i,o,p,q,s,d,f,g,h,j,k,l,m,w,x,c,v,b,n,0
a,z,e,r,t,y,u,i,o,p,q,s,d,f,g,h,j,k,l,m,w,x,c,v,b,n,0
a,z,e,r,t,y,u,i,o,p,q,s,d,f,g,h,j,k,l,m,w,x,c,v,b,n,0
~~~~
On Wed, 22 Dec 2004 22:23:09 +0100 philippe wrote:
il faut creer une copie d'un document texte.txt
local $/ ; open(TEXT, 'texte.txt') or die "Cannot open: $!n" ; my $text = <TEXT> ;
J'ai maintenant une copie du fichier entier dans $text.
et y rajouter des 'simple quotes' (en dessous du 4) :
Moi, sous le 4, je n'ai rien, et au-dessus, j'ai $, mais c'est un détail. J'imagine que tu parles des simples quotes qui sont juste sous les doubles, à gauche de la touche entrée? ;)
- après la 4eme virgule, - avant la 5eme virgule, - apres la 13eme virgule, - avant la 14eme virgule.
Je découpe le texte au niveau des virgules, et je mets les bouts dans une liste.
my @t = split ',', $text ;
Je n'ai plus qu'à modifier cette liste comme je veux, en pensant que la virgule n°N est entre l'élément N-1 et N. qq{} est équivalent aux quotes doubles, mais ici, je le trouve plus lisible:
$t[4] = qq{'$t[4]} ; # après la 4eme virgule, $t[4] = qq{$t[4]'} ; # avant la 5eme virgule, $t[13] = qq{'$t[13]} ; # apres la 13eme virgule, $t[13] = qq{$t[13]'} ; # avant la 14eme virgule.
Une fois que c'est écrit comme ça, on s'aperçoit que tu voulais juste mettre entre quotes le 5e et le 14e élément. Formulé ainsi, c'est plus simple à comprendre et je n'aurais peut-être pas écrit le programme comme je l'ai fait. Enfin, maintenant que c'est écrit...
Puis j'affiche tous les éléments de la liste @t, en mettant des virgules entre:
print STDOUT join ',', @t ;
Et hop!
Bon, le code est fourni sans garantie de fonctionnement, hein.
Merci Xavier et Jérémie,
Je pense que ces bonnes choses de Noël ont quelque peu obscurci mon esprit.
mon fichier test est test2.txt ~~~~ a,z,e,r,t,y,u,i,o,p,q,s,d,f,g,h,j,k,l,m,w,x,c,v,b,n,0 a,z,e,r,t,y,u,i,o,p,q,s,d,f,g,h,j,k,l,m,w,x,c,v,b,n,0 a,z,e,r,t,y,u,i,o,p,q,s,d,f,g,h,j,k,l,m,w,x,c,v,b,n,0 a,z,e,r,t,y,u,i,o,p,q,s,d,f,g,h,j,k,l,m,w,x,c,v,b,n,0 ~~~~
"philippe" a écrit dans le message news: cqcojr$1jru$
Bonjour,
je ne connais pas grand chose à perl mais je pense que vous pourriez résoudre mon problème.
je dois modifier un fichier texte pour incorporer des donnees dans une base
de données.
Bonjour Philippe,
Je ne sais pas répondre à ton problème, mais tu a l'air de connaître les accès aux Bases de Données depuis un script.
Pourrais-tu me mettre sur ce forum un exemple d'accès et de traitement de la base de données.
D'avance merci. Cordialement. Michel Site : www.missions-courtes.com
philippe
Missions courtes wrote:
"philippe" a écrit dans le message news: cqcojr$1jru$
Bonjour,
je ne connais pas grand chose à perl mais je pense que vous pourriez résoudre mon problème.
je dois modifier un fichier texte pour incorporer des donnees dans une base
de données.
Bonjour Philippe,
Je ne sais pas répondre à ton problème, mais tu a l'air de connaître les accès aux Bases de Données depuis un script.
Pourrais-tu me mettre sur ce forum un exemple d'accès et de traitement de la base de données.
D'avance merci. Cordialement. Michel Site : www.missions-courtes.com
Bonjour,
en perl je n'y connais absolument rien.
ce que je veux faire ici, c'est modifier un fichier texte pour ensuite faire du MySQL.
maintenant si c'est la logique de gestion de base de données que tu cherches, j'imagine qu'elle est la même en perl, qu'en php, python ou c, et ce lien sur php te donnera une idée de la chose : http://www.phpfrance.com/tutorials il y a plein de liens à propos de MySQL
autrement si c'est perl qui t'interesse ceci doit être un bon point de départ http://dev.mysql.com/doc/mysql/fr/Perl.html
désolé de ne pouvoir t'aider plus concernant perl/MySQL
Philippe
Missions courtes wrote:
"philippe" <linux@rousselot.org> a écrit dans le message news:
cqcojr$1jru$1@biggoron.nerim.net...
Bonjour,
je ne connais pas grand chose à perl mais je pense que vous pourriez
résoudre mon problème.
je dois modifier un fichier texte pour incorporer des donnees dans une
base
de données.
Bonjour Philippe,
Je ne sais pas répondre à ton problème, mais tu a l'air de connaître les
accès aux Bases de Données depuis un script.
Pourrais-tu me mettre sur ce forum un exemple d'accès et de traitement de
la base de données.
D'avance merci.
Cordialement.
Michel
Site : www.missions-courtes.com
Bonjour,
en perl je n'y connais absolument rien.
ce que je veux faire ici, c'est modifier un fichier texte pour ensuite faire
du MySQL.
maintenant si c'est la logique de gestion de base de données que tu
cherches, j'imagine qu'elle est la même en perl, qu'en php, python ou c, et
ce lien sur php te donnera une idée de la chose :
http://www.phpfrance.com/tutorials
il y a plein de liens à propos de MySQL
autrement si c'est perl qui t'interesse ceci doit être un bon point de
départ
http://dev.mysql.com/doc/mysql/fr/Perl.html
désolé de ne pouvoir t'aider plus concernant perl/MySQL
"philippe" a écrit dans le message news: cqcojr$1jru$
Bonjour,
je ne connais pas grand chose à perl mais je pense que vous pourriez résoudre mon problème.
je dois modifier un fichier texte pour incorporer des donnees dans une base
de données.
Bonjour Philippe,
Je ne sais pas répondre à ton problème, mais tu a l'air de connaître les accès aux Bases de Données depuis un script.
Pourrais-tu me mettre sur ce forum un exemple d'accès et de traitement de la base de données.
D'avance merci. Cordialement. Michel Site : www.missions-courtes.com
Bonjour,
en perl je n'y connais absolument rien.
ce que je veux faire ici, c'est modifier un fichier texte pour ensuite faire du MySQL.
maintenant si c'est la logique de gestion de base de données que tu cherches, j'imagine qu'elle est la même en perl, qu'en php, python ou c, et ce lien sur php te donnera une idée de la chose : http://www.phpfrance.com/tutorials il y a plein de liens à propos de MySQL
autrement si c'est perl qui t'interesse ceci doit être un bon point de départ http://dev.mysql.com/doc/mysql/fr/Perl.html
désolé de ne pouvoir t'aider plus concernant perl/MySQL
Philippe
Nicolas George
philippe wrote in message <cqmlgf$2b6h$:
ce que je veux faire ici, c'est modifier un fichier texte pour ensuite faire du MySQL.
Tiens, juste comme ça, est-ce qu'il est possible que certains champs contiennent des apostrophes ?
philippe wrote in message <cqmlgf$2b6h$1@biggoron.nerim.net>:
ce que je veux faire ici, c'est modifier un fichier texte pour ensuite faire
du MySQL.
Tiens, juste comme ça, est-ce qu'il est possible que certains champs
contiennent des apostrophes ?
le 26/12/2004 à 15:07, philippe a écrit dans le message <cqmgjp$29g5$ :
#!/usr/bin/perl -l -i.bat aF'/,/' -n
#!/usr/bin/perl -i.bat -naF',' use strict; use warnings;
foreach((4,13)) {
foreach (4,13) {
$F[$_]="'".$F[$_]."'"; } print join(q/,/,@F);
-- Benoit Izac
Jérémy JUST
On Sun, 26 Dec 2004 15:07:53 +0100 philippe wrote:
$t[4]| | =| qq{'$t[4]}| | ; ^ ^ ^ ^ ^
Tu as des caractères bizarres ici. Je pense que c'est un problème ce copier-coller.
auriez vous une petite idée ?
D'autre part: - tu n'avais pas précisé (ou bien j'avais mal lu) qu'il fallait faire ça sur chaque ligne du texte (moi, je l'ai justement fait sur le texte global), - j'avais fait une grosse erreur de logique. :(
La version corrigée (cette fois-ci, je l'ai testée et elle semble fonctionner) est:
<<<<< #!/usr/bin/perl
open(TEXT, 'test2.txt') or die "Cannot open: $!n" ;
while(<TEXT>) {my @t = split ',', $_ ;
$t[4] = qq{'$t[4]'} ; $t[13] = qq{'$t[13]'} ;
print STDOUT join ',', @t ; }
-- Jérémy JUST
On Sun, 26 Dec 2004 15:07:53 +0100
philippe <linux@rousselot.org> wrote:
$t[4]| | =| qq{'$t[4]}| | ;
^ ^ ^ ^ ^
Tu as des caractères bizarres ici. Je pense que c'est un problème ce
copier-coller.
auriez vous une petite idée ?
D'autre part:
- tu n'avais pas précisé (ou bien j'avais mal lu) qu'il fallait faire
ça sur chaque ligne du texte (moi, je l'ai justement fait sur le texte
global),
- j'avais fait une grosse erreur de logique. :(
La version corrigée (cette fois-ci, je l'ai testée et elle semble
fonctionner) est:
<<<<<
#!/usr/bin/perl
open(TEXT, 'test2.txt') or die "Cannot open: $!n" ;
On Sun, 26 Dec 2004 15:07:53 +0100 philippe wrote:
$t[4]| | =| qq{'$t[4]}| | ; ^ ^ ^ ^ ^
Tu as des caractères bizarres ici. Je pense que c'est un problème ce copier-coller.
auriez vous une petite idée ?
D'autre part: - tu n'avais pas précisé (ou bien j'avais mal lu) qu'il fallait faire ça sur chaque ligne du texte (moi, je l'ai justement fait sur le texte global), - j'avais fait une grosse erreur de logique. :(
La version corrigée (cette fois-ci, je l'ai testée et elle semble fonctionner) est:
<<<<< #!/usr/bin/perl
open(TEXT, 'test2.txt') or die "Cannot open: $!n" ;