[PERL] Ecrire dans un fichier [Résolu/Fermé]

Signaler
Messages postés
2
Date d'inscription
dimanche 24 octobre 2004
Statut
Membre
Dernière intervention
16 mai 2005
-
 cyrille -
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

44 réponses

Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 544
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__
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 544
Voilà un aperçu ici https://www.cjoint.com/?dnmYCaei6z
Messages postés
63
Date d'inscription
lundi 5 mars 2007
Statut
Membre
Dernière intervention
27 novembre 2018
5
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 ?
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 544
Il faut que tu me montre tout ce que tu fait.
Avec des imprimés écran.

Chez moi ça fonctionne sans problème.
Messages postés
63
Date d'inscription
lundi 5 mars 2007
Statut
Membre
Dernière intervention
27 novembre 2018
5
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 ?
Messages postés
63
Date d'inscription
lundi 5 mars 2007
Statut
Membre
Dernière intervention
27 novembre 2018
5
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
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 544
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">;

Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 544
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
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 544
Affiche ton script ici, fait copier coller, pas une image
Messages postés
63
Date d'inscription
lundi 5 mars 2007
Statut
Membre
Dernière intervention
27 novembre 2018
5
#!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__
Messages postés
63
Date d'inscription
lundi 5 mars 2007
Statut
Membre
Dernière intervention
27 novembre 2018
5
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 -
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 544
Mais pour les autre fichiers c'est bon, je parle de resultat_061208.txt, etc. ?
Messages postés
63
Date d'inscription
lundi 5 mars 2007
Statut
Membre
Dernière intervention
27 novembre 2018
5
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...
Messages postés
63
Date d'inscription
lundi 5 mars 2007
Statut
Membre
Dernière intervention
27 novembre 2018
5
statXiti_
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 544
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

Messages postés
63
Date d'inscription
lundi 5 mars 2007
Statut
Membre
Dernière intervention
27 novembre 2018
5
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
Messages postés
63
Date d'inscription
lundi 5 mars 2007
Statut
Membre
Dernière intervention
27 novembre 2018
5
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 ?
Messages postés
63
Date d'inscription
lundi 5 mars 2007
Statut
Membre
Dernière intervention
27 novembre 2018
5
ça y est, jai résuii
youpppppppiiiiiiiiiiii
je suis trop fort

merci encore
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 544
je suis trop fort

C'est bien :-))
Messages postés
63
Date d'inscription
lundi 5 mars 2007
Statut
Membre
Dernière intervention
27 novembre 2018
5
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
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 544
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