Split document texte

Fermé
RGWhitestar Messages postés 2 Date d'inscription mercredi 29 janvier 2014 Statut Membre Dernière intervention 30 janvier 2014 - 29 janv. 2014 à 16:04
RGWhitestar Messages postés 2 Date d'inscription mercredi 29 janvier 2014 Statut Membre Dernière intervention 30 janvier 2014 - 30 janv. 2014 à 13:23
Bonjour,

Je viens vers vous car je suis un peu désemparé ^^'

Actuellement je dois créer un plugin Nagios permettant de superviser la sauvegarde de poste client sur un répertoire partagé.

Le but étant de le faire en deux script, un qui permet de faire une comparaison de fichier pour savoir si la sauvegarde est faite ou non qui va ainsi retourner dans un document texte deux chiffres séparé par "," (par exemple "0,1") le premier chiffre étant le code pour le statut Nagios et le deuxième pour le nombre de jour qui sépare la sauvegarde.

J'ai alors besoin dans mon script Perl d'isolé c'est deux chiffres les uns des autres pour appliqué un if au premier chiffre et dans mon message de sortie pour nagios affiché le deuxième chiffre.

Merci d'avance pour votre aide, n'hésitez pas à me demander plus de précisions.

2 réponses

[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
Modifié par [Dal] le 30/01/2014 à 11:28
Salut RGWhitestar,

Je suppose qu'il n'y a qu'une ligne dans ton fichier texte, et que s'il y a des lignes additionnelles, elles doivent être ignorées.

Avec une regexp simple, tu peux vérifier le format des données présentées sur la ligne et capturer les données qui t'intéressent.

par exemple, comme cela :

#!/usr/bin/perl

use strict;
use warnings;

my $filename = 'RGWhitestar.txt';
open my $file, $filename or die "Could not open $filename: $!";

my $line;
while ($line = <$file>)  {
    print $line;
    last if $. == 1;
}
close $file;

my $stat_nag = "";
my $nb_jours = "";
if ($line =~ /^([0-9]+),([0-9]+)$/) {
    $stat_nag = $1;
    $nb_jours = $2;
    print "code pour le statut Nagios : $stat_nag\n";
    print "nombre de jour qui sépare la sauvegarde : $nb_jours\n";
} else {
    print "Erreur de format\n";
    exit;
}

# faire quelque chose avec $stat_nag et $nb_jours


Le programme ne traite que la première ligne, s'il y a d'autres lignes, elles sont ignorées sans générer d'erreurs.

La regexp matche :
1- une ligne commençant par
2- un ou plusieurs chiffres
3- suivis d'une virgule
4- suivie d'un ou plusieurs chiffres
5- avec rien d'autre sur la ligne
6- les parenthèses capturantes conservent les valeurs matchées en 2 et 4 dans les variables spéciales $1 et $2, que l'on range dans des variables utilisables dans la suite du programme.

Si la ligne ne matche pas, un message d'erreur de format l'indique et termine le programme.


Dal
0
RGWhitestar Messages postés 2 Date d'inscription mercredi 29 janvier 2014 Statut Membre Dernière intervention 30 janvier 2014
30 janv. 2014 à 13:23
Merci beaucoup pour c'est précision j'ai réussi à adapter mon code et tout fonctionne :)
0