[PERL] Ecrire dans un fichier

Résolu/Fermé
kayari Messages postés 2 Date d'inscription dimanche 24 octobre 2004 Statut Membre Dernière intervention 16 mai 2005 - 16 mai 2005 à 14:00
 cyrille - 7 juil. 2011 à 17:53
Bonjour tout le monde,
je programme en perl et j'ai besoin de modifier des paramètres dans un fichier automatiquement. voici un extrait du fichier :
n 108
m 56
s 2
t 4
a 1 2 1
j'ai besoin d'accéder aux lignes 3 et 4 et de changer 2 et 4 par d'autres valeurs (se répète en boucle). Je n'ai pas su changer des valeurs à l'intérieur du fichier.
Est ce que quelqu'un pourrait me donner une indication.
Merci d'avance
A voir également:

44 réponses

lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
13 mars 2007 à 12:47
Voici le code qui fonctionne sous win
use warnings;use strict;

my @fic_stat = <"D:/Documents and Settings/Administrateur/Bureau/staXiti*">;


foreach my $fichier (@fic_stat){
  $fichier =~ /\/staXiti_(\d{4})(\d\d)\.txt/;
  my $date = "${1}20$2";

  my $fic = "resultat_" . "$date.txt";

  open F_ECRIRE,">>$fic" or warn "E/S : $!\n";
  open F_LIRE,"$fichier" or warn "E/S : $!\n";

  while(<F_LIRE>){
    s/^/$date = /;
    print F_ECRIRE;
  }
}
#*********** FIN TRAITEMENT **********#
#
# concateantion dans resultatfinal.txt
open F_ECRIRE,">>resultatfinal.txt" or die "E/S : $!\n";


my @fic_res = <"D:/Documents\ and\ Settings/Administrateur/Bureau/resultat_*.txt">;

foreach my $e(@fic_res){
  open F_LIRE,"$e" or warn "E/S : ICI $!\n";
  while(<F_LIRE>){
    print F_ECRIRE;
  }
  print F_ECRIRE "\n";
}
__END__
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
13 mars 2007 à 12:51
Voilà un aperçu ici https://www.cjoint.com/?dnmYCaei6z
0
chabRRR Messages postés 63 Date d'inscription lundi 5 mars 2007 Statut Membre Dernière intervention 27 novembre 2018 5
13 mars 2007 à 13:32
Mince !! le fichier résultat est toujours vide ?!?!
je comprends pas, j'ai essayé de changer le nom du repertoire, puis de mettre tout mes fichiers sur le bureau, mais ...ça ne va toujours pas.

je suis désolé de te demander encore un coup de main, mais d'ou peux venir le problème ?
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
13 mars 2007 à 13:49
Il faut que tu me montre tout ce que tu fait.
Avec des imprimés écran.

Chez moi ça fonctionne sans problème.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
chabRRR Messages postés 63 Date d'inscription lundi 5 mars 2007 Statut Membre Dernière intervention 27 novembre 2018 5
13 mars 2007 à 14:09
les fichiers et le script sont sur mon bureau
https://www.cjoint.com/?dnoa7cQVFD

le script est edité comme cela, et je pense que le problème est dans le script...
https://www.cjoint.com/?dnohVdyajX

les fichiers ont cette structure
https://www.cjoint.com/?dnodObwzzw

la console execute le script
https://www.cjoint.com/?dnoepZOjT3

et voila le resultat qui est vide ???
https://www.cjoint.com/?dnogcMWQvN

Qu'en penses tu ?
0
chabRRR Messages postés 63 Date d'inscription lundi 5 mars 2007 Statut Membre Dernière intervention 27 novembre 2018 5
13 mars 2007 à 15:17
j'ai tout recommencer, et jai seuleument changé le Administrateur en M149067 dans le chemin du dossier. et ça ne marche toujours pas, le fichier resultatfinal est toujours vide. je comprends vraiment pas d'ou vient le probleme
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
13 mars 2007 à 15:37
Re,

c'est normal

regarde bien ton script :-)))

avant d'exécuter supprime resultatfinal.txt

regarde comme tu as écrit
@fic_res

enleve les antislashes, et mets le bon chemin

c'est ça que tu dois avoir
my @fic_res = <"D:/Documents and Settings/M149067/Bureau/resultat_*.txt">;


tu as oublié le M

my @fic_res = <"D:/Documents\ and\ Settings/149067/Bureau/resultat_*.txt">;

0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
13 mars 2007 à 15:42
Affiche ici ton script que tu utilises.

Je vais le corriger.

C'est juste l'histoire d'écrire les chemins

pas d'antislashes, avec / et pas \ pour la séparation de dossiers, le chemin entre guillemets et ATTENTION à toutes les caractères

Des fois une lettre en plus ou en moins peut donner des choses bizarre

par exemple imagine toi une que tu veux parler des bit mets sans vouloir tu ajoute un e :-DD, ça ne sera pas la même chose :-DDDDD
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
13 mars 2007 à 15:48
Affiche ton script ici, fait copier coller, pas une image
0
chabRRR Messages postés 63 Date d'inscription lundi 5 mars 2007 Statut Membre Dernière intervention 27 novembre 2018 5
13 mars 2007 à 15:50
#!C:/Perl/bin/perl.exe
use warnings;use strict;

my @fic_stat = <"D:/Documents and Settings/M149067/Bureau/staXiti*">;


foreach my $fichier (@fic_stat){
$fichier =~ /\/staXiti_(\d{4})(\d\d)\.txt/;
my $date = "${1}20$2";

my $fic = "resultat_" . "$date.txt";

open F_ECRIRE,">>$fic" or warn "E/S : $!\n";
open F_LIRE,"$fichier" or warn "E/S : $!\n";

while(<F_LIRE>){
s/^/$date = /;
print F_ECRIRE;
}
}
#*********** FIN TRAITEMENT **********#
#
# concateantion dans resultatfinal.txt
open F_ECRIRE,">>resultatfinal.txt" or die "E/S : $!\n";


my @fic_res = <"D:/Documents and Settings/M149067/Bureau/resultat_*.txt">;

foreach my $e(@fic_res){
open F_LIRE,"$e" or warn "E/S : ICI $!\n";
while(<F_LIRE>){
print F_ECRIRE;
}
print F_ECRIRE "\n";
}
__END__
0
chabRRR Messages postés 63 Date d'inscription lundi 5 mars 2007 Statut Membre Dernière intervention 27 novembre 2018 5
13 mars 2007 à 16:03
et le resultatfinal.txt est comme ci dessous, il y a 20 aul ieu de la date escomptée:

20 = 00:01:37 10.100.62.52 /hit.xiti s=241243&s2=1&p=vers_PCC&hl=0x1x37&idclient=1165363297472 VXML -
20 = 00:01:38 10.100.62.52 /hit.xiti s=241243&s2=1&p=PNC&hl=0x1x38&idclient=1165363297472 VXML -
20 = 00:01:39 10.100.62.52 /hit.xiti s=241243&s2=1&p=GSM_non_reconnu&hl=0x1x39&idclient=1165363297472 VXML -
20 = 00:01:40 10.100.62.52 /hit.xiti s=241243&s2=1&p=pas_sur_vol&hl=0x1x40&idclient=1165363297472 VXML -
20 = 00:01:41 10.100.62.52 /hit.xiti s=241243&s2=1&p=absence_contact_BO&hl=0x1x41&idclient=1165363297472 VXML -
20 = 00:03:03 10.100.62.52 /hit.xiti s=241243&s2=1&p=transfere_debordement&hl=0x3x3&idclient=1165363297472 VXML -
20 = 00:05:00 10.100.62.52 /hit.xiti s=241243&s2=1&p=vers_PCC&hl=0x5x0&idclient=1165363499970 VXML -
20 = 00:05:01 10.100.62.52 /hit.xiti s=241243&s2=1&p=PNT&hl=0x5x1&idclient=1165363499970 VXML -
20 = 00:05:02 10.100.62.52 /hit.xiti s=241243&s2=1&p=GSM_non_reconnu&hl=0x5x2&idclient=1165363499970 VXML -
20 = 00:05:03 10.100.62.52 /hit.xiti s=241243&s2=1&p=pas_sur_vol&hl=0x5x3&idclient=1165363499970 VXML -
20 = 00:06:23 10.100.62.52 /hit.xiti s=241243&s2=1&p=transfere&hl=0x6x23&idclient=1165363499970 VXML -
20 = 00:08:13 10.100.62.52 /hit.xiti s=241243&s2=1&p=vers_CLD&hl=0x8x13&idclient=1165363693516 VXML -
20 = 00:08:14 10.100.62.52 /hit.xiti s=241243&s2=1&p=PNT&hl=0x8x14&idclient=1165363693516 VXML -
20 = 00:08:19 10.100.62.52 /hit.xiti s=241243&s2=1&p=transfere&hl=0x8x19&idclient=1165363693516 VXML -
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
13 mars 2007 à 16:04
Mais pour les autre fichiers c'est bon, je parle de resultat_061208.txt, etc. ?
0
chabRRR Messages postés 63 Date d'inscription lundi 5 mars 2007 Statut Membre Dernière intervention 27 novembre 2018 5
13 mars 2007 à 16:08
non, aucune modif dans les autres fichiers originaux
et seulement un fichier crée en plus de resultatfinal.txt : resultat_20.txt

d'ou cet ajout du 20 au lieu de la date...
0
chabRRR Messages postés 63 Date d'inscription lundi 5 mars 2007 Statut Membre Dernière intervention 27 novembre 2018 5
13 mars 2007 à 16:10
statXiti_
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
13 mars 2007 à 16:13
ben, c'est ta faute perl ecrire dans un fichier#14

fait une copie/coller de ton dernier script
supprime les fichiers resultat_ *** et resultatfinal.txt

0
chabRRR Messages postés 63 Date d'inscription lundi 5 mars 2007 Statut Membre Dernière intervention 27 novembre 2018 5
13 mars 2007 à 16:14
jai fait les modif en stat au lieu du sta
ok, c bon, voila tout marche

je te remercie pour tout (ton aide et ta patience)

le problème provenait du fait que je me suis certainement trompé dans les post précedent en expliquant, j'ai du oublié ce T a la fin de stat.

Milles merci, je suis super content

Bon courage et a bientot lors de ma prochaine surpirse galere sur mon projet
0
chabRRR Messages postés 63 Date d'inscription lundi 5 mars 2007 Statut Membre Dernière intervention 27 novembre 2018 5
13 mars 2007 à 16:47
naaaa, en fait, il reste un ptit problème

regarde mon fichier resultat
06122009 = 22:21:14 10.100.62.52 /hit.xiti s=241243&s2=1&p=vers_PCC&hl=22x21x14&idclient=1165702873855 VXML -
06122009 = 22:21:15 10.100.62.52 /hit.xiti s=241243&s2=1&p=PNT&hl=22x21x15&idclient=1165702873855 VXML -
06122009 = 22:21:18 10.100.62.52 /hit.xiti s=241243&s2=1&p=transfere&hl=22x21x18&idclient=1165702873855 VXML -
06122009 = 22:26:58 10.100.62.52 /hit.xiti s=241243&s2=1&p=vers_PN&hl=22x26x58&idclient=1165703217863 VXML -
06122009 = 22:26:59 10.100.62.52 /hit.xiti s=241243&s2=1&p=PNT&hl=22x26x59&idclient=1165703217863 VXML -
06122009 = 22:27:15 10.100.62.52 /hit.xiti s=241243&s2=1&p=transfere&hl=22x27x15&idclient=1165703217863 VXML -

06122010 = 04:06:42 10.100.62.52 /hit.xiti s=241243&s2=1&p=vers_CLD&hl=4x6x42&idclient=1165723601630 VXML -
06122010 = 04:06:43 10.100.62.52 /hit.xiti s=241243&s2=1&p=PNT&hl=4x6x43&idclient=1165723601630 VXML -
06122010 = 04:06:44 10.100.62.52 /hit.xiti s=241243&s2=1&p=GSM_reconnu&hl=4x6x44&idclient=1165723601630 VXML -
06122010 = 04:06:45 10.100.62.52 /hit.xiti s=241243&s2=1&p=erreur_timeout&hl=4x6x45&idclient=1165723601630 VXML -
06122010 = 04:07:01 10.100.62.52 /hit.xiti s=241243&s2=1&p=raccroche_applicatif&hl=4x7x1&idclient=1165723601630 VXML -
06122010 = 04:07:17 10.100.62.52 /hit.xiti s=241243&s2=1&p=vers_CLD&hl=4x7x17&idclient=1165723637136 VXML -


il y a un problème avec les expressions regulières, la date à inscrire doit etre au format 06122006, 07122006, 08122006... et elle actuellement 06122006, 06122007, 06122008...
c pa grand chose, mais si on pouvait voir ça stp ?
0
chabRRR Messages postés 63 Date d'inscription lundi 5 mars 2007 Statut Membre Dernière intervention 27 novembre 2018 5
13 mars 2007 à 16:49
ça y est, jai résuii
youpppppppiiiiiiiiiiii
je suis trop fort

merci encore
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
13 mars 2007 à 19:19
je suis trop fort

C'est bien :-))
0
chabRRR Messages postés 63 Date d'inscription lundi 5 mars 2007 Statut Membre Dernière intervention 27 novembre 2018 5
19 mars 2007 à 10:16
Salut, je te dérange encore avec mes problèmes d'insertion d'une date dans un fichier.

le code que tu m'as fourni fonctionne bien avec mes anciens fichiers mais il ne fonctionne pas pour mes nouveaux fichiers.

le code :
#!C:/Perl/bin/perl.exe
use warnings;use strict;

my @fic_stat = <"D:/Documents and Settings/M149067/Bureau/Simon/DB/Xiti/Sem10/statXiti*">;


foreach my $fichier (@fic_stat){
$fichier =~ /\/statXiti_(\d{4})(\d\d)\.txt/;
my $date = "20${1}$2";

my $fic = "resultat_" . "$date.txt";

open F_ECRIRE,">>$fic" or warn "E/S : $!\n";
open F_LIRE,"$fichier" or warn "E/S : $!\n";

while(<F_LIRE>){
s/^/$date = /;
print F_ECRIRE;
}
}
#*********** FIN TRAITEMENT **********#
#
# concateantion dans resultatfinal.txt
open F_ECRIRE,">>resultatfinal.txt" or die "E/S : $!\n";


my @fic_res = <"D:/Documents and Settings/M149067/Bureau/Simon/DB/Xiti/Sem10/resultat_*.txt">;

foreach my $e(@fic_res){
open F_LIRE,"$e" or warn "E/S : ICI $!\n";
while(<F_LIRE>){
print F_ECRIRE;
}
print F_ECRIRE "\n";
}
__END__

les fichiers :
statXiti_070305.txt, statXiti_070306.txt, statXiti_070307.txt, statXiti_070308.txt...

qui contiennent
04:44:18 10.100.62.52 /hit.xiti s=241243&s2=1&p=vers_PN
04:44:21 10.100.62.52 /hit.xiti s=241243&s2=1&p=raccroche_util
05:37:06 10.100.62.52 /hit.xiti s=241243&s2=1&p=vers_PCC
05:37:07 10.100.62.52 /hit.xiti s=241243&s2=1&p=PNC

les fichiers resultats sont bon sauf que ils contiennent des lignes étranges a la fin de chaque fichier (qui sont ensuite concaténés avec ces lignes bizarres):

20070305 = 22:17:31 10.100.62.52 /hit.xiti s=241243&s2=1&p=vers_PCC
20070305 = 22:17:32 10.100.62.52 /hit.xiti s=241243&s2=1&p=PNC
20070305 = 22:17:35 10.100.62.52 /hit.xiti s=241243&s2=1&p=transfere
20070305 = PK  —vp6¹ä%ês2 1»  statXiti_070305.txt¥K^7r†÷ò¼š]&¼_xÈfÆ BÐ£éxdG-ýóCž¯û;<õ¾TŠl»-oìzúԍE²Hšð.„w¶|gÍ­1LîÑ}÷¯?}úúÇçO_?}÷ô½ Öÿ‡'÷½ýïßÿþøåéÃ_~üÃO?žCx¶åŸþöñçOŸ¿~omö&Õsõæ»ÿþŸ?ÿé»ùç2ÁY-áËÃǏ_~ùøÓã‡ß¾~úùÓÓÃ×Çß¾ÜyÎþ¿¼øÎçw&iy·/úᇎˆÏ>?'Ah?.†ì%!k ùñž•ÂÕùÿúó‡/ùüù·;DÚd±N ùúåáóÓß¿<ÞÖie!ìP(¢:o«Dx-â4D“î•ÒÕŽ$•ÔÄ•€Í‚+]•
ñ§ÒB"AíOw5áèG\xÕ
20070305 = gmªƒX£…<~ùÒ2Ƈ‡¿ýôøôé—Ïw5:’S“îÿð·Ç¿þòåoÿh²ï<÷ÿóÒ;c<l´~z6Ä¿B°©ý- jÿúˏïïÂÁµ&ÂÕ®%¬@ÀÅ8Ä©u4>:Î)æ£7Œ‡à#|ˆ¹H€ú{‹xòÛ3áQm‘KÊêˆHì—Óú‹‚l$Y=zëŒ÷’°ÕߟÒ!«sé^BE¶~
20070305 = †«ï‚ú ®qíês€ÏH¶ø”ŠD-⮤.=(¥«£ "»S &õè!LÑ0x†÷ú¼šÂûgYoæÔ²xLUÔq·D±0®6„PQC "¾sêœ!4ŸäŒ]ÎjCŸ*jÒÑÄTºW@ê¨E4ځ0ò²½d½^. 9“+ Ôqª(/¢ÂõµÔP&ã4aÓ~´Œ«Ó~ QB›S‰Pᥔ½IG péêŒ*”Ô˜W £,|PR!Ÿ‘½³áZÀtĺ#uéàIé»ù¨3 !£Ú‚·ŽJjžJ|µ4H@XÈG§pHG\¸SࢢŽp`†È†¹j¨% ¨`J)ú* j¼xÑ!ÕÏ…«Õ/ª‹‚f ¯®Á„r;–…»£J˵xIPûÒÝ M8z¾ËB™!êòZ܏/€ŠKqµeŠbŠ¨#áTPÅ¥.ÜíÂÁˆ@®ÍØÔ¾úk36°suÑÖ%B ÷l×¥CL¤«•ÁÜ)¨&NQç#a
20070305 = Çf¶Œá|I˜Â‡ò.ÅZ$Aý§%®ÅM„ïgՁ¬Ê!ú¹¹´ƒ#3tÆðï®üs@C—]r±aˆ&-Á¥¿ÁžÌl9e;sx–9‚w¾ekP[{TÉo”.}‰3¨’ސ<ËNüKÔîD¾„82âòPz7w$ci4±4Õ‚:îNkG’ú¸pµŠÐ‘¤@
20070305 = ѯMJ;°ÕIÎÐ`RDL°¡.ÌFC8¨É&ÒÕŽÄ,ëèœâÕËh


Je pense qu'il a une incohérence entre le script, les fichiers et les chemins, mais je ne vois pas ce que cela pourrait etre ?

Merci d'avance
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
19 mars 2007 à 11:11
Salut,

envoie par cjoint.com quelques nouveaux fichiers
en fait mets les fichiers dans un répertoire et compresse le répertoire

Si avec les anciens fichiers ça marche alors c'est un problème de nouveau fichiers
0