Modifier un fichier avec un script perl
Fermé
eccomi
Messages postés
13
Date d'inscription
dimanche 9 décembre 2007
Statut
Membre
Dernière intervention
5 janvier 2009
-
5 janv. 2009 à 15:26
loupius - 5 janv. 2009 à 22:36
loupius - 5 janv. 2009 à 22:36
A voir également:
- Modifier un fichier avec un script perl
- Comment ouvrir un fichier epub ? - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier rar - Guide
- Ouvrir un fichier .bin - Guide
- Modifier dns - Guide
4 réponses
Le plus simple, et qui marche à tous les coups, est de passer par un fichier temporaire.
-Création d'un fichier temporaire,
- Lecture dans le fichier ligne par ligne,
- Modification de la ligne,
- Ecriture dans le fichier temporaire,
- Suppression du fichier,
- Renommer le temporaire en nom du fichier.
La difficulté est le nom du fichier temporaire qui ne doit pas exister.
Il existe plusieurs méthodes:
-> http://perl.mines-albi.fr/DocFr/perlfaq5.html#comment créer un fichier temporaire
-Création d'un fichier temporaire,
- Lecture dans le fichier ligne par ligne,
- Modification de la ligne,
- Ecriture dans le fichier temporaire,
- Suppression du fichier,
- Renommer le temporaire en nom du fichier.
La difficulté est le nom du fichier temporaire qui ne doit pas exister.
Il existe plusieurs méthodes:
-> http://perl.mines-albi.fr/DocFr/perlfaq5.html#comment créer un fichier temporaire
davlar
Messages postés
75
Date d'inscription
lundi 26 novembre 2007
Statut
Membre
Dernière intervention
11 mai 2009
57
5 janv. 2009 à 18:23
5 janv. 2009 à 18:23
Salut ...
Pour ajouter:
open(FIC,">>data.txt")
Les options sont:
Rien = lecture
< = lecture
> = ecriture (ecrasement)
>> = ecriture (ajout)
+> = lecture et ecriture (ecrasement)
+< = lecture et ecriture (ajout)
Ton problème n'est pas sur ton fichier .... tu ne "print" pas dedans voilà tout....
Tu dois faire: print LIRE $_;
A+
Dave
Pour ajouter:
open(FIC,">>data.txt")
Les options sont:
Rien = lecture
< = lecture
> = ecriture (ecrasement)
>> = ecriture (ajout)
+> = lecture et ecriture (ecrasement)
+< = lecture et ecriture (ajout)
Ton problème n'est pas sur ton fichier .... tu ne "print" pas dedans voilà tout....
Tu dois faire: print LIRE $_;
A+
Dave
eccomi
Messages postés
13
Date d'inscription
dimanche 9 décembre 2007
Statut
Membre
Dernière intervention
5 janvier 2009
5 janv. 2009 à 18:35
5 janv. 2009 à 18:35
Salut,
Bien sûr que je ne n'imprime rien dans mon fichier, le "print" que je fais, c'est juste pour voir rapidement dans mon terminal les modifications effectuées.
Si j'imprime dans mon fichier, cela n'écrase pas les anciennes données, mais ça ajoute les données modifiées:
Merci pour la réponse.
Bien sûr que je ne n'imprime rien dans mon fichier, le "print" que je fais, c'est juste pour voir rapidement dans mon terminal les modifications effectuées.
Si j'imprime dans mon fichier, cela n'écrase pas les anciennes données, mais ça ajoute les données modifiées:
Archives — Juillet 2005Mondialisation, acte IILe grand tournant de Washington En recevant, le 20 juin, MM. Jean-Claude Juncker et José Manuel Barroso, délégués d’une Union européenne en crise, M. George W. Bush a affirmé : « Les Etats-Unis continuent d’apporter leur soutien à une Union européenne solide comme partenaire. » Par-delà les formules diplomatiques, l’administration américaine se débat dans ses contradictions, car son unilatéralisme – économique, commercial et militaire – se heurte à la réalité multilatérale de la planète. La santé économique de la première puissance dépend largement de l’épargne mondiale, mais les politiques de Washington, inspirées par sa suprématie militaire, contredisent le sacro-saint principe du libre-échange officiellement défendu. Archives — Juillet 2005Mondialisation, acte IILe grand tournant de Washington En recevant, le 20 juin, MM. Jean-Claude Juncker et José Manuel Barroso, délégués d’une Union européenne en crise, M. George W. Bush a affirmé : « Les Etats-Unis continuent d’apporter leur soutien à une Union européenne solide comme partenaire. » Par-delà les formules diplomatiques, l’administration américaine se débat dans ses contradictions, car son unilatéralisme – économique, commercial et militaire – se heurte à la réalité multilatérale de la planète. La santé économique de la première puissance dépend largement de l’épargne mondiale, mais les politiques de Washington, inspirées par sa suprématie militaire, contredisent le sacro-saint principe du libre-échange officiellement défendu.
Merci pour la réponse.
loupius
>
eccomi
Messages postés
13
Date d'inscription
dimanche 9 décembre 2007
Statut
Membre
Dernière intervention
5 janvier 2009
5 janv. 2009 à 18:59
5 janv. 2009 à 18:59
Ben oui c'est normal.
Tu ne peux pas supprimer des données dans un fichier; tout ce que tu peux faire c'est écraser des données.
D'une manière générale, il faut gérer 2 pointeurs: un pour la lecture et un pour l'écriture.
Pointeur lecture à 0, on lit une ligne et on conserve le pointeur de lecture.
Pointeur écriture à 0, on écrit et on conserve le pointeur d'écriture.
On remet le pointeur de lecture, on lit une ligne et on conserve le pointeur de lecture,
On remet le pointeur d'écriture, on écrit et on conserve le pointeur de lecture,
Et ainsi de suite jusqu'à la fin en faisant bien attention que l'on écrit moins que l'on ne lit.
Un autre solution, plus simple et si le fichier est raisonnablement court, est de lire fichier dans une chaîne de caractère, de fermer le fichier, de le réouvrir en écriture avec écrasement; évidemment dans ce cas on prend le risque d'un plantage entre l'écrasement et l'écriture.
Tu ne peux pas supprimer des données dans un fichier; tout ce que tu peux faire c'est écraser des données.
D'une manière générale, il faut gérer 2 pointeurs: un pour la lecture et un pour l'écriture.
Pointeur lecture à 0, on lit une ligne et on conserve le pointeur de lecture.
Pointeur écriture à 0, on écrit et on conserve le pointeur d'écriture.
On remet le pointeur de lecture, on lit une ligne et on conserve le pointeur de lecture,
On remet le pointeur d'écriture, on écrit et on conserve le pointeur de lecture,
Et ainsi de suite jusqu'à la fin en faisant bien attention que l'on écrit moins que l'on ne lit.
Un autre solution, plus simple et si le fichier est raisonnablement court, est de lire fichier dans une chaîne de caractère, de fermer le fichier, de le réouvrir en écriture avec écrasement; évidemment dans ce cas on prend le risque d'un plantage entre l'écrasement et l'écriture.
davlar
Messages postés
75
Date d'inscription
lundi 26 novembre 2007
Statut
Membre
Dernière intervention
11 mai 2009
57
5 janv. 2009 à 20:36
5 janv. 2009 à 20:36
Hé ... pas bête ..
Comme c'est pas trop gros ... Lis ton fichier et met le tout dans un tableau en prenant soin de couper a tout les lignes.
Relis ton tableau et fait tes modifications. et ensuite réécrit par dessus ton fichier avec le contenue de ton tableau ...
Sinon si tu sais comment imbriquer des commandes tu peu toujours essayer ceci .. (c'est l'équivalent du sed en unix)
perl -pi.bak -e "s/è/è/g" texte.txt
perl -pi.bak -e "s/é/é/g" texte.txt
(le .bak c'est nécessaire si tu es en windows ... sinon tu reçois des erreurs).
David
Comme c'est pas trop gros ... Lis ton fichier et met le tout dans un tableau en prenant soin de couper a tout les lignes.
Relis ton tableau et fait tes modifications. et ensuite réécrit par dessus ton fichier avec le contenue de ton tableau ...
Sinon si tu sais comment imbriquer des commandes tu peu toujours essayer ceci .. (c'est l'équivalent du sed en unix)
perl -pi.bak -e "s/è/è/g" texte.txt
perl -pi.bak -e "s/é/é/g" texte.txt
(le .bak c'est nécessaire si tu es en windows ... sinon tu reçois des erreurs).
David
eccomi
Messages postés
13
Date d'inscription
dimanche 9 décembre 2007
Statut
Membre
Dernière intervention
5 janvier 2009
5 janv. 2009 à 22:07
5 janv. 2009 à 22:07
Merci à vous deux pour ces pistes.
Je crois que je vais être obligé de créer un fichier temporaire.
Mon problème, c'est que j'ai un dossier de 9500 fichiers, sur lesquels je fais déjà plusieurs traitements avant d'en arriver aux remplacements des caractères diacritiques mal encodés.
Bonne soirée,
eccomi.
Je crois que je vais être obligé de créer un fichier temporaire.
Mon problème, c'est que j'ai un dossier de 9500 fichiers, sur lesquels je fais déjà plusieurs traitements avant d'en arriver aux remplacements des caractères diacritiques mal encodés.
Bonne soirée,
eccomi.
5 janv. 2009 à 18:31