Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Changer un mot dans un fichier

5 réponses
Avatar
ECCO
Qu'elle façon de faire simple me conseilleriez vosu d'appliquer pour changer
le contenu des appostrophes dans un fichiers (suivant certaines conditions)
sans rien changer d'autre.


La ligne a changer est comme ca :
KC_Gfx_DisplayText(120, 45, SPR_FONTE_BLANC_1, (u8*)"", FONT_CENTER, 240,
24); /// dateandtime

Pour obtenir un truc comme ca :
KC_Gfx_DisplayText(120, 45, SPR_FONTE_BLANC_1, (u8*)"14:58:23 28/7/2005",
FONT_CENTER, 240, 24); /// dateandtime



j'ai fait un truc de goret comme ca :


my ($sec,$min,$heure,$mjour,$mois,$annee,$sjour,$ajour,$isdst) =
localtime(time);
$annee += 1900;
$mois += 1;

open READ, "< $targetSources\\menus.cpp" or die $!;
while(<READ>)
{
chomp;
if (/\bdateandtime/)
{
s/(.+?")(".+)/$1$heure:$min:$sec - $mjour\/$mois\/$annee$2/;
print "Date fixed\n";
}
push(@file, $_);
}
close READ;

open WRITE, "> $targetSources\\menus.cpp" or die $!;
foreach (@file)
{
print WRITE "$_\n";
}
close WRITE;

5 réponses

Avatar
Paul Gaborit
À (at) Thu, 28 Jul 2005 14:59:13 +0200,
"ECCO" écrivait (wrote):
La ligne a changer est comme ca :
KC_Gfx_DisplayText(120, 45, SPR_FONTE_BLANC_1, (u8*)"", FONT_CENTER, 240,
24); /// dateandtime

Pour obtenir un truc comme ca :
KC_Gfx_DisplayText(120, 45, SPR_FONTE_BLANC_1, (u8*)"14:58:23 28/7/2005",
FONT_CENTER, 240, 24); /// dateandtime

j'ai fait un truc de goret comme ca :


my ($sec,$min,$heure,$mjour,$mois,$annee,$sjour,$ajour,$isdst) =
localtime(time);
$annee += 1900;
$mois += 1;

open READ, "< $targetSourcesmenus.cpp" or die $!;
while(<READ>)
{
chomp;
if (/bdateandtime/)
{
s/(.+?")(".+)/$1$heure:$min:$sec - $mjour/$mois/$annee$2/;
print "Date fixedn";
}
push(@file, $_);
}
close READ;

open WRITE, "> $targetSourcesmenus.cpp" or die $!;
foreach (@file)
{
print WRITE "$_n";
}
close WRITE;


Votre script mémorise tout le fichier avant de le réécrire (et vous
perdez le fichier original ce qui pose problème en cas de
bug...).

Je ferai comme ça :

my ($sec,$min,$heure,$mjour,$mois,$annee) = (localtime())[0..5];
$annee += 1900;
$mois += 1;

my $filename = "$targetSources/menus.cpp";
# le / marche très bien sous Windows

open my $read, "<", $filename
or die "Can't read file '$filename' : $!n";
open my $write, ">", "$filename.new"
` or die "Can't write file '$filename.new' : $!n";
while(<$read>) {
# pas de chomp
if (/bdateandtime/) { # c'est votre condition
s{""}{"$heure:$min:$sec - $mjour/$mois/$annee"};
warn "Line $.: date fixedn";
}
print $write $_; # pas de chomp : pas de n
}
close $read
or die "Can't close file '$filename': $!";
close $write
or die "Can't close file '$filename.new': $!";
rename $filename, "$filename.old"
or "Can't rename '$filename' to '$filename.old' $!n";
rename "$filename.new", $filename;
or "Can't rename '$filename.new' to '$filename' $!n";

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>

Avatar
ECCO
Votre script mémorise tout le fichier avant de le réécrire (et vous
perdez le fichier original ce qui pose problème en cas de
bug...).


Oui, mais non. Le but est d'écrire la date a l"interrieur d'un fichier
source, a un endroit spécialement prévu pour ca. Pas de faire un backup...

Tres élégant le [ s{""}{"$heure:$min:$sec - $mjour/$mois/$annee"}; ], bien
trouvé.

Il y vraiment plus d'un moyen pour écrire une chose en Perl.

Avatar
kurtz le pirate
In article <42ea59ac$0$22315$,
"ECCO" wrote:

::> Votre script mémorise tout le fichier avant de le réécrire (et vous
::> perdez le fichier original ce qui pose problème en cas de
::> bug...).
::
::Oui, mais non. Le but est d'écrire la date a l"interrieur d'un fichier
::source, a un endroit spécialement prévu pour ca. Pas de faire un backup...

tu ajoutes à la fin du script de paul gaborit :
unlink $filename.old or die "...";
Avatar
Paul Gaborit
À (at) Fri, 29 Jul 2005 18:30:43 +0200,
"ECCO" écrivait (wrote):
Votre script mémorise tout le fichier avant de le réécrire (et vous
perdez le fichier original ce qui pose problème en cas de
bug...).


Oui, mais non. Le but est d'écrire la date a l"interrieur d'un fichier
source, a un endroit spécialement prévu pour ca. Pas de faire un backup...


Et si le script plante (pour une raison quelconque) juste après la
réouverture du fichier source et avant que la réécriture soit faite ?

Enfin, c'est vous qui voyez... ;-)

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>


Avatar
ECCO
Oui, mais non. Le but est d'écrire la date a l"interrieur d'un fichier
source, a un endroit spécialement prévu pour ca. Pas de faire un
backup...


Et si le script plante (pour une raison quelconque) juste après la
réouverture du fichier source et avant que la réécriture soit faite ?


Le fichier que je change est déjà une copie EXACT du source original.

Il s'agit d'un developpement multiplateforme, les sources provienent de la
plateforme originale et sont copié dans le repertoire de developpement par
un script en Perl.
Au passage j'implémente l'heure et la date.
Voila, vous savez tout