OVH Cloud OVH Cloud

inserer des caractères à une place bien précise dans un document

16 réponses
Avatar
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.

Votre aide serait grandement appréciée

d'avance merci

Philippe

10 réponses

1 2
Avatar
Xavier
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.

Votre aide serait grandement appréciée

d'avance merci

Philippe
#!/usr/bin/perl -l -i.bat aF'/,/' -n


foreach((4,13)) {
$F[$_]="'".$F[$_]."'";
}
print join(q/,/,@F);

# la sauvegarde, porte le suffixe .bat
# utilisation : ./script.pl texte.txt

---
There's ore than one way to do it

Avatar
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

Avatar
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
~~~~

le script de Xavier est

#!/usr/bin/perl -l -i.bat aF'/,/' -n

foreach((4,13)) {
$F[$_]="'".$F[$_]."'";
}
print join(q/,/,@F);

et j'obtiens

[ atc_output]$ ./script.pl test2.txt
,,,,'',,,,,,,,,''
[ atc_output]$

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


Avatar
Missions courtes
"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

Avatar
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


Avatar
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 ?

Avatar
philippe
Nicolas George wrote:

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 ?


non, cela aurait rendu les choses plus compliquées

Philippe


Avatar
Missions courtes
"philippe" a écrit dans le message news:
cqmlgf$2b6h$
Missions courtes wrote:

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


Merci Phillippe,
Je n'ai plus qu'à potasser cette doc.

Cordialement.
Michel
Site : www.missions-courtes.com

Avatar
Benoit Izac
Bonjour,

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

Avatar
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





1 2