A voir également:
- [Perl] souci lecture fichier csv
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Ouvrir fichier .bin - Guide
- Fichier iso - Guide
5 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
24 janv. 2007 à 19:46
24 janv. 2007 à 19:46
Salut,
C'est bien que tu as trouvé :-)
Cependant la manière dont tu as écrit ton script n'est pas très propre ni correcte
Par exemple
$nom[$j] = ($hote,$IP);
tu affectes à un scalaire une liste, ce qui veut dire que $nom[$i] va prendre la valeur de $IP
l'opérateur virgule sait s'il est dans un contexte scalaire ou dans un contexte de liste
Autre exemple
($hote,$IP) = split /;/, <ADRIP>;
ici tu dois faire un split pour chaque ligne de fichier dans ton cas $_ et pas <ADRIP>
et d'ailleurs à chaque passage de ligne les variables sont remplacées et à la fin du fichier tu n'auras que la dernière ligne splitée
Pour ne pas parler de l'horreur :-))
print DB
"\$\TTL\t86400\n",
"@\tIN\tSOA\t ent.toto.fr. root.toto.fr. (\n",
"\t\t\t\t1997022700\t; Serial\n",
"\t\t\t\t28800\t; Refresh\n",
"\t\t\t\t14400\t; Retry\n",
"\t\t\t\t3600000\t; Expire\n",
"\t\t\t\t86400 )\t; Minimum\n",
"\n",
"@\tIN\tNS\tent.toto.fr\n",
"ent\tIN\tA\t10.2.2.145\n",
"test\tIN\tCNAME\tent\n";
Moi j'aurais écrit comme ça
C'est bien que tu as trouvé :-)
Cependant la manière dont tu as écrit ton script n'est pas très propre ni correcte
Par exemple
$nom[$j] = ($hote,$IP);
tu affectes à un scalaire une liste, ce qui veut dire que $nom[$i] va prendre la valeur de $IP
l'opérateur virgule sait s'il est dans un contexte scalaire ou dans un contexte de liste
Autre exemple
($hote,$IP) = split /;/, <ADRIP>;
ici tu dois faire un split pour chaque ligne de fichier dans ton cas $_ et pas <ADRIP>
et d'ailleurs à chaque passage de ligne les variables sont remplacées et à la fin du fichier tu n'auras que la dernière ligne splitée
Pour ne pas parler de l'horreur :-))
print DB
"\$\TTL\t86400\n",
"@\tIN\tSOA\t ent.toto.fr. root.toto.fr. (\n",
"\t\t\t\t1997022700\t; Serial\n",
"\t\t\t\t28800\t; Refresh\n",
"\t\t\t\t14400\t; Retry\n",
"\t\t\t\t3600000\t; Expire\n",
"\t\t\t\t86400 )\t; Minimum\n",
"\n",
"@\tIN\tNS\tent.toto.fr\n",
"ent\tIN\tA\t10.2.2.145\n",
"test\tIN\tCNAME\tent\n";
Moi j'aurais écrit comme ça
$t="\t" x 4; # le nombre de tabulations print DB "\$\TTL\t86400 @\tIN\tSOA\t ent.toto.fr. root.toto.fr. ( ${t}1997022700\t; Serial ${t}28800\t; Refresh ${t}14400\t; Retry ${t}3600000\t; Expire ${t}86400 )\t; Minimum\n @\tIN\tNS\tent.toto.fr ent\tIN\tA\t10.2.2.145 test\tIN\tCNAME\tent\n";A ne pas oublier non plus d'indenter ton code.
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
25 janv. 2007 à 16:40
25 janv. 2007 à 16:40
Re,
désolé pour l'indentation sur mon script c'est bien indenté
En ce cas utilise le balises code
Pour utiliser les balises code :
1. tu selectionne le texte à mettre entre les balises
2. tu fait clic sur le bouton Code qui est à côté de
désolé pour l'indentation sur mon script c'est bien indenté
En ce cas utilise le balises code
Pour utiliser les balises code :
1. tu selectionne le texte à mettre entre les balises
2. tu fait clic sur le bouton Code qui est à côté de
CCM G I S
maintenant j'ai un autre souci
j'ai plusieurs de zone reverse dns dans mon fichier csv les adresses ne sont pas trié donc je cherche comment faire pour qu'il compare l'adresse et rentre bien dans son fichier reverse dans ma config.
j'ai fait
Bien sur j'intègre ça au script ci-dessus ;) (et j'ai bien ouvert les 3 REV)
Au résultat il me mets toutes les ip dans le REV1
j'ai plusieurs de zone reverse dns dans mon fichier csv les adresses ne sont pas trié donc je cherche comment faire pour qu'il compare l'adresse et rentre bien dans son fichier reverse dans ma config.
j'ai fait
while($i<$j) { if ($adr[$i] eq 128) { print REV2 "$adr[$i]\tIN\tPTR\t$nom[$i]\n"; } elsif ($adr[$i] eq 194) { print REV3 "$adr[$i]\tIN\tPTR\t$nom[$i]\n"; } else print REV1 "$adr[$i]\tIN\tPTR\t$nom[$i]\n"; $i++; } close REV1; close REV2; close REV3
Bien sur j'intègre ça au script ci-dessus ;) (et j'ai bien ouvert les 3 REV)
Au résultat il me mets toutes les ip dans le REV1
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
26 janv. 2007 à 20:25
26 janv. 2007 à 20:25
Salut,
je vais me pencher demain sur ton problème :-)
cependant j'aurai besoin de ton fichier tableip.csv à moins qu'il est confidentiel.
je vais reécrire ton script (la manière dont tu as écrit le tien je n'aime pas trop, même si en Perl on est libre de faire ce qu'on veux, à savoir que c'est bien d'avoir une certaine discipline) et je vais te donner des explications, biensûr si ça t'interesse ;-)
Par exemple
open DB, ">/var/named/toto.fr";
C'est correct :-)
Toutefois c'est bien d'utiliser un test dans le cas qu'on ne peux pas créer le fichier en mode écriture.
Voilà par exemple plusieurs façon d'ouvrir un fichier en écriture (en gras c'est ceux qu'on préfére en général et en particulier avec la version or die)
A choisir celle qui te conviens.
A toi.
je vais me pencher demain sur ton problème :-)
cependant j'aurai besoin de ton fichier tableip.csv à moins qu'il est confidentiel.
je vais reécrire ton script (la manière dont tu as écrit le tien je n'aime pas trop, même si en Perl on est libre de faire ce qu'on veux, à savoir que c'est bien d'avoir une certaine discipline) et je vais te donner des explications, biensûr si ça t'interesse ;-)
Par exemple
open DB, ">/var/named/toto.fr";
C'est correct :-)
Toutefois c'est bien d'utiliser un test dans le cas qu'on ne peux pas créer le fichier en mode écriture.
Voilà par exemple plusieurs façon d'ouvrir un fichier en écriture (en gras c'est ceux qu'on préfére en général et en particulier avec la version or die)
unless (open(F_WRITE,">$fichier")) { die "E/S : $!\n" } if (!open(F_WRITE,">$fichier")) { die "E/S : $!\n" } die "E/S : $!\n" unless open(F_WRITE,">$fichier"); die "E/S : $!\n" if !open(F_WRITE,">$fichier"); open(F_WRITE,">$fichier") || die "E/S : $!\n"; open F_WRITE,">$fichier" or die "E/S : $!\n";Donc tous les 6 lignes de code font exactement la même chose :-)
A choisir celle qui te conviens.
A toi.
24 janv. 2007 à 19:08
J'ai lu ton poste m'ai j'ai séché !
Si tu as la réponse je suis preneur !
bob
26 janv. 2007 à 13:48