2010-01-15 6 views
3

J'essaye d'écrire un script de configuration. Pour chaque client, il va demander des variables, puis écrire plusieurs fichiers texte.Perl: ouvrir un fichier et l'enregistrer sous un nom différent après l'édition

Mais chaque fichier texte doit être utilisé plusieurs fois, il ne peut donc pas les écraser. Je préférerais lire à partir de chaque fichier, fait les changements, puis les enregistré dans $ name.originalname.

Est-ce possible?

+0

Ce n'est pas très clair. Pouvez-vous nous dire ce que signifie "utilisé plus d'une fois", et ce que vous avez essayé –

+0

Je n'ai encore rien essayé, je prévois. "Utilisé plusieurs fois" signifie le même fichier pour différents ensembles de variables. Ainsi, il doit rester inchangé. – Soop

Répondre

1

pourquoi ne pas copier d'abord le fichier puis modifiez le fichier copié

+0

Ah ok, je vais donner un coup :) Semble évident, mais je suis un noob – Soop

0

Le code ci-dessous attend de trouver un modèle de configuration pour chaque client où, par exemple, le modèle de Joe est joe.originaljoe et écrit la sortie joe:

foreach my $name (@customers) { 
    my $template = "$name.original$name"; 
    open my $in, "<", $template or die "$0: open $template"; 
    open my $out, ">", $name  or die "$0: open $name"; 

    # whatever processing you're doing goes here 
    my $output = process_template $in; 

    print $out $output   or die "$0: print $out: $!"; 

    close $in; 
    close $out     or warn "$0: close $name"; 
} 
+0

J'ai compris quelque chose: j'ai oublié que perl ne ... "flux" comme d'autres scripts. J'ai bloqué un $ customer_name = "placeholder"; là, et a obtenu un fichier appelé CPE_Option_A.txt.placeholder. Donc, je pense que le problème est que je dois m'assurer qu'il copie le fichier en dernier. – Soop

4

Vous voulez quelque chose comme Template Toolkit. Vous laissez le moteur de création de modèles ouvrir un modèle, remplir les espaces réservés et enregistrer le résultat. Vous ne devriez pas avoir à faire de cette magie vous-même.

Pour les très petits travaux, j'utilise parfois Text::Template.

0

en supposant que vous voulez lire dans un fichier, y apporter des modifications en ligne par ligne, puis écrire un autre fichier:

#!/usr/bin/perl 

use strict; 
use warnings; 

# set $input_file and #output_file accordingly 

# input file 
open my $in_filehandle, '<', $input_file or die $!; 
# output file 
open my $out_filehandle, '>', $output_file or die $!; 

# iterate through the input file one line at a time 
while (<$in_filehandle>) { 

    # save this line and remove the newline 
    my $input_line = $_; 
    chomp $input_line; 

    # prepare the line to be written out 
    my $output_line = do_something($input_line); 

    # write to the output file 
    print $output_line . "\n"; 

} 

close $in_filehandle; 
close $out_filehandle; 
Questions connexes