A voir également:
- Aide sur perl
- Denon perl pro test - Accueil - Audio
- Active perl - Télécharger - Édition & Programmation
- Perl foreach ✓ - Forum Perl
- Perl substitution ✓ - Forum Perl
- [Perl] WWW::Mechanize - Forum Perl
15 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
13 oct. 2006 à 13:25
13 oct. 2006 à 13:25
Salut,
si tu n'as pas la solution jusqu'à ce soir, je vais essayer de t'aider.
et je veux le resultats sous form d'un tableau comme suit (sans repitition):
10/08/06 05:05:47 minor MT2FE7B DEVICE=board:0,liu:2
Pas claire ça.
Tu veux qui exactement?
Un champ date, un champ heure, ..
Et si je compte bien il s'agit de 5 champs.
lami20j
si tu n'as pas la solution jusqu'à ce soir, je vais essayer de t'aider.
et je veux le resultats sous form d'un tableau comme suit (sans repitition):
10/08/06 05:05:47 minor MT2FE7B DEVICE=board:0,liu:2
Pas claire ça.
Tu veux qui exactement?
Un champ date, un champ heure, ..
Et si je compte bien il s'agit de 5 champs.
lami20j
ligo7
Messages postés
3
Date d'inscription
mardi 1 avril 2003
Statut
Membre
Dernière intervention
16 octobre 2006
13 oct. 2006 à 13:53
13 oct. 2006 à 13:53
merci Lami20j
en fait il s'agit d'une table d'access qui contient les champs suivants:
date heure severité système carte
je porte a votre connaissance que le fichier source contient des lignes ki s repete et je vx les suprimer dans le fichier résultant
en fait il s'agit d'une table d'access qui contient les champs suivants:
date heure severité système carte
je porte a votre connaissance que le fichier source contient des lignes ki s repete et je vx les suprimer dans le fichier résultant
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
13 oct. 2006 à 14:27
13 oct. 2006 à 14:27
Re,
en fait pour importer un fichier texte dans une base access, je suppose que les champs (dans le fichier texte) doivent être separées par un espace ou tabulation (ça je ne sais pas).
En ce qui concerne l'élimination des lignes en double, triple,... ça ne pose pas un problème.
Mets ton fichier sur https://www.cjoint.com/ et je verai ce soir.
lami20j
en fait pour importer un fichier texte dans une base access, je suppose que les champs (dans le fichier texte) doivent être separées par un espace ou tabulation (ça je ne sais pas).
En ce qui concerne l'élimination des lignes en double, triple,... ça ne pose pas un problème.
Mets ton fichier sur https://www.cjoint.com/ et je verai ce soir.
lami20j
ligo7
Messages postés
3
Date d'inscription
mardi 1 avril 2003
Statut
Membre
Dernière intervention
16 octobre 2006
13 oct. 2006 à 15:26
13 oct. 2006 à 15:26
les champs dans le fichier texte sont separées par un etoile (*)
just une remarque j'ai deja crée un programme qui permet de faire ce type de traitement mé c tres long....
use DBI;
open (F,"test.txt") || die "$!";
my @data= <F>;
close (F);
my $base='D:\syteme\base.mdb';
my $dbh=DBI->connect("dbi:ADO:Driver=Microsoft Access Driver (*.mdb); DBQ=$base","","") or die $DBI::errstr;
foreach $line (@data)
{
chomp($line);
if ($line=~/^(\d{2}\/\d{2}\/\d{2})\*(\d{2}\:\d{2}\:\d{2})\*(\w+)\*snmpSystemId\=(\w+).*\*(.*)\*(.*)/)
{
#print "$1\t$2\t$3\t$4\t$5\t$6\n";
my $Command1= "delete from test where (Date='$1' and heure='$2' and severite='$3' and systeme='$4' and carte='$5')";
my $sth1= $dbh->prepare($Command1);
my $Result1 = $sth1->execute;
$dbh->do("INSERT INTO `test` (Date,heure,severité,systeme,carte) VALUES ('$1','$2','$3','$4','$5')");
}
}
print "fin \n";
<>;
just une remarque j'ai deja crée un programme qui permet de faire ce type de traitement mé c tres long....
use DBI;
open (F,"test.txt") || die "$!";
my @data= <F>;
close (F);
my $base='D:\syteme\base.mdb';
my $dbh=DBI->connect("dbi:ADO:Driver=Microsoft Access Driver (*.mdb); DBQ=$base","","") or die $DBI::errstr;
foreach $line (@data)
{
chomp($line);
if ($line=~/^(\d{2}\/\d{2}\/\d{2})\*(\d{2}\:\d{2}\:\d{2})\*(\w+)\*snmpSystemId\=(\w+).*\*(.*)\*(.*)/)
{
#print "$1\t$2\t$3\t$4\t$5\t$6\n";
my $Command1= "delete from test where (Date='$1' and heure='$2' and severite='$3' and systeme='$4' and carte='$5')";
my $sth1= $dbh->prepare($Command1);
my $Result1 = $sth1->execute;
$dbh->do("INSERT INTO `test` (Date,heure,severité,systeme,carte) VALUES ('$1','$2','$3','$4','$5')");
}
}
print "fin \n";
<>;
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
14 oct. 2006 à 10:21
14 oct. 2006 à 10:21
Salut,
voilà comment tu peux obtenir tes variables.
A adapter à ton code.
Si tu n'arrives pas à adapter à ton code fait un signe.
voilà comment tu peux obtenir tes variables.
A adapter à ton code.
Si tu n'arrives pas à adapter à ton code fait un signe.
#!/usr/bin/perl
use warnings;use strict;
open F_LIRE,"test.txt" # ouvre le test.txt en lecture
or die "E/S : $!\n"; # msg si erreur d'ouverture
my %h; # pour les lignes en double, triple...
while ( <F_LIRE> ) { # lis le fichier ligne par ligne
chomp; # supprime le caractère de fin de ligne
next if /^\s*$/; # ne traite pas les lignes vides
s/snmp.*?=|\/alarm.*(?=\*device)//gi; # suppression de texte au tour de
# de texte MT....
$h{$_}++; # stockage dans un hash
# elimine lignes en double, triple..
# mieux que d'utiliser un tableau
# qui stocke tout le fichier
# y compris les doublons, triplons
# on consomme moins de mémoire.
}
foreach (keys %h) {
my ($d,$h,$sev,$sys,$book) = split /\*/,$_; # j'obtiens les variables
# nécessaires pour INSERT INTO
print "$d : $h : $sev : $sys : $book\n"; # affiche le contenu de
# variables
# seulement pour montrer leur
# contenu.
# A adapter dans ton code
}
__END__
Tu ce que tu vois après __END__
n'est pas lu par le script
Les commentaires commence avec le #
Pense à ceux qui lisent ton code.
Et aussi à toi pour la maintenance.
Il faut respecter quelque règles de base
- l'identation par exemple
Ex:
- en Perl pour le bloc if on préfère écrire
if ( condition ) {
instructions;
}
Quand on ne connaît pas la précédence des opérateurs
on utilise les paranthèses.
Cependant l'utilisation en trop ce n'est pas top.
Ex:
Tu as écrit
open (F,"test.txt) || die "$!";
si on utilise l'opérateur or qui à
la précédence la plus faible
on n'est pas obligé d'utiliser les paranthèses.
Et le code devient
open F,"test.txt or die "$!";
C'est comme tu dit dans le langage normal
Ouvre le fichier en lecture ou meurs.(Aproche de langage qu'on parle).
lami20j
ligo7
Messages postés
3
Date d'inscription
mardi 1 avril 2003
Statut
Membre
Dernière intervention
16 octobre 2006
16 oct. 2006 à 15:00
16 oct. 2006 à 15:00
le programme marche trés bien mé g trouvé klk anomalies concernant le dernier champs dans le fichier source .
le dernier champs peut commencer par DEVICE comme il pt commencer par d'autre chaine de caractère.
Merci d'avance.
le dernier champs peut commencer par DEVICE comme il pt commencer par d'autre chaine de caractère.
Merci d'avance.
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
16 oct. 2006 à 18:46
16 oct. 2006 à 18:46
Salut,
mé g trouvé klk anomalies concernant le dernier champs dans le fichier source .
le dernier champs peut commencer par DEVICE comme il pt commencer par d'autre chaine de caractère.
Je me confronte souvent avec ce problème.
Quand on parse un fichier c'est bien de connaître la structure de fichier. Dans toutes les lignes que tu m'as donnée je ne vois que DEVICE.
Donc pour la prochaine fois il faut préciser.
Change la ligne
mé g trouvé klk anomalies concernant le dernier champs dans le fichier source .
le dernier champs peut commencer par DEVICE comme il pt commencer par d'autre chaine de caractère.
Je me confronte souvent avec ce problème.
Quand on parse un fichier c'est bien de connaître la structure de fichier. Dans toutes les lignes que tu m'as donnée je ne vois que DEVICE.
Donc pour la prochaine fois il faut préciser.
Change la ligne
s/snmp.*?=|\/alarm.*(?=\*device)//gi;avec
s/snmp.*?=|\/alarm.*(?=\*.*=)//gi;lami20j
G deja fé cette operation de remplacer DEVICE par ".*=" mé ca donne l'erreur suivant:
Use of uninitialized value in concatenation (.) or string at D:\test\test.pl line 26 ,<F_LIRE> line 12.
Merci pour votre collaboration
Use of uninitialized value in concatenation (.) or string at D:\test\test.pl line 26 ,<F_LIRE> line 12.
Merci pour votre collaboration
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
17 oct. 2006 à 12:16
17 oct. 2006 à 12:16
Salut,
je pense que c'est le moment de m'afficher le fichier que tu traites.
Tu peux mettre ton fichier sur https://www.cjoint.com/
Ce que tu vois c'est un message d'avertissement, pas forcement une interruption du script.
Comme je te l'ai déjà dit si je ne connais pas la structure de fichier je ne peux pas faire grand chose. Je suis totalement aveugle.
Ce que je te donnes se base sur les quelques lignes que tu m'as données.
lami20j
je pense que c'est le moment de m'afficher le fichier que tu traites.
Tu peux mettre ton fichier sur https://www.cjoint.com/
Ce que tu vois c'est un message d'avertissement, pas forcement une interruption du script.
Comme je te l'ai déjà dit si je ne connais pas la structure de fichier je ne peux pas faire grand chose. Je suis totalement aveugle.
Ce que je te donnes se base sur les quelques lignes que tu m'as données.
lami20j
Re ;
pr recapitulation voici un extrait du fichier traité:
----------
07/04/06*09:03:12*indeterminate*snmpSystemId=MT2FE5B/privateId=MT2FE5B/alarmsId=MT2FE5B/alarmObjectsId=MT2FE5B/alarmEntryId=24353*Could not attach voice resource. *Unspecified application alarm.
07/04/06*09:03:12*indeterminate*snmpSystemId=MT2FE5B/privateId=MT2FE5B/alarmsId=MT2FE5B/alarmObjectsId=MT2FE5B/alarmEntryId=24353*Could not attach voice resource. *Unspecified application alarm.
07/04/06*09:30:04*minor*snmpSystemId=MT2FE7B/privateId=MT2FE7B/alarmsId=MT2FE7B/alarmObjectsId=MT2FE7B/alarmEntryId=13420*Can not hangup, resource still attached*Unspecified minor alarm in the LI_
07/04/06*09:30:04*minor*snmpSystemId=MT2FE7B/privateId=MT2FE7B/alarmsId=MT2FE7B/alarmObjectsId=MT2FE7B/alarmEntryId=13420*Can not hangup, resource still attached*Unspecified minor alarm in the LI_
07/04/06*09:30:08*minor*snmpSystemId=MT2FE7B/privateId=MT2FE7B/alarmsId=MT2FE7B/alarmObjectsId=MT2FE7B/alarmEntryId=13421*Can not hangup, resource still attached*Unspecified minor alarm in the LI_
07/04/06*09:30:08*minor*snmpSystemId=MT2FE7B/privateId=MT2FE7B/alarmsId=MT2FE7B/alarmObjectsId=MT2FE7B/alarmEntryId=13421*Can not hangup, resource still attached*Unspecified minor alarm in the LI_
07/04/06*09:30:11*minor*snmpSystemId=MT2FE7B/privateId=MT2FE7B/alarmsId=MT2FE7B/alarmObjectsId=MT2FE7B/alarmEntryId=13422*Can not hangup, resource still attached*Unspecified minor alarm in the LI_
07/04/06*09:30:11*minor*snmpSystemId=MT2FE7B/privateId=MT2FE7B/alarmsId=MT2FE7B/alarmObjectsId=MT2FE7B/alarmEntryId=13422*Can not hangup, resource still attached*Unspecified minor alarm in the LI_
07/04/06*09:30:29*minor*snmpSystemId=MT2FE7B/privateId=MT2FE7B/alarmsId=MT2FE7B/alarmObjectsId=MT2FE7B/alarmEntryId=13428*Can not hangup, resource still attached*Unspecified minor alarm in the LI_
07/05/06*07:47:08*minor*snmpSystemId=MT2FE2B/privateId=MT2FE2B/alarmsId=MT2FE2B/alarmObjectsId=MT2FE2B/alarmEntryId=9323*DEVICE=board:0,liu:6 ERRORNUM=105 ALARMCODE=1 ERRORTXT=Frame Slip*Frame Slip.
07/05/06*07:47:08*minor*snmpSystemId=MT2FE2B/privateId=MT2FE2B/alarmsId=MT2FE2B/alarmObjectsId=MT2FE2B/alarmEntryId=9323*DEVICE=board:0,liu:6 ERRORNUM=105 ALARMCODE=1 ERRORTXT=Frame Slip*Frame Slip.
----------
et le programme modefié est le suivant :
------
#!/usr/bin/perl
use warnings;use strict;
open F_LIRE,"test5.txt"
or die "E/S : $!\n";
my %h;
while ( <F_LIRE> ) {
chomp;
next if /^\s*$/;
s/snmp.*?=|\/pri.*(?=\*.*=)//gi;
$h{$_}++;
}
foreach (keys %h) {
my ($d,$h,$sev,$sys,$book,$f) = split /\*/,$_;
print "$d : $h : $sev : $sys : $book : $f\n";
}
<>;
---------
normalement je dois voir le résultat comme suit:
07/04/06 : 09:03:12 : indeterminate : MT2FE5B : Could not attach voice resource. : Unspecified application alarm.
07/05/06 : 07:47:08 : minor : MT2FE2B : DEVICE=board:0,liu:6 ERRORNUM=105 ALARMCODE=1 ERRORTXT=Frame Slip : Frame Slip.
07/04/06 : 09:30:29 : minor : MT2FE7B : Can not hangup, resource still attached : Unspecified minor alarm in the LI_
07/04/06 : 09:30:11 : minor : MT2FE7B : Can not hangup, resource still attached : Unspecified minor alarm in the LI_
07/04/06 : 09:03:12 : indeterminate : MT2FE5B : Could not attach voice resource. : Unspecified application alarm.
07/04/06 : 09:30:04 : minor : MT2FE7B : Can not hangup, resource still attached : Unspecified minor alarm in the LI_
07/04/06 : 09:30:08 : minor : MT2FE7B : Can not hangup, resource still attached : Unspecified minor alarm in the LI_
----
thx again
pr recapitulation voici un extrait du fichier traité:
----------
07/04/06*09:03:12*indeterminate*snmpSystemId=MT2FE5B/privateId=MT2FE5B/alarmsId=MT2FE5B/alarmObjectsId=MT2FE5B/alarmEntryId=24353*Could not attach voice resource. *Unspecified application alarm.
07/04/06*09:03:12*indeterminate*snmpSystemId=MT2FE5B/privateId=MT2FE5B/alarmsId=MT2FE5B/alarmObjectsId=MT2FE5B/alarmEntryId=24353*Could not attach voice resource. *Unspecified application alarm.
07/04/06*09:30:04*minor*snmpSystemId=MT2FE7B/privateId=MT2FE7B/alarmsId=MT2FE7B/alarmObjectsId=MT2FE7B/alarmEntryId=13420*Can not hangup, resource still attached*Unspecified minor alarm in the LI_
07/04/06*09:30:04*minor*snmpSystemId=MT2FE7B/privateId=MT2FE7B/alarmsId=MT2FE7B/alarmObjectsId=MT2FE7B/alarmEntryId=13420*Can not hangup, resource still attached*Unspecified minor alarm in the LI_
07/04/06*09:30:08*minor*snmpSystemId=MT2FE7B/privateId=MT2FE7B/alarmsId=MT2FE7B/alarmObjectsId=MT2FE7B/alarmEntryId=13421*Can not hangup, resource still attached*Unspecified minor alarm in the LI_
07/04/06*09:30:08*minor*snmpSystemId=MT2FE7B/privateId=MT2FE7B/alarmsId=MT2FE7B/alarmObjectsId=MT2FE7B/alarmEntryId=13421*Can not hangup, resource still attached*Unspecified minor alarm in the LI_
07/04/06*09:30:11*minor*snmpSystemId=MT2FE7B/privateId=MT2FE7B/alarmsId=MT2FE7B/alarmObjectsId=MT2FE7B/alarmEntryId=13422*Can not hangup, resource still attached*Unspecified minor alarm in the LI_
07/04/06*09:30:11*minor*snmpSystemId=MT2FE7B/privateId=MT2FE7B/alarmsId=MT2FE7B/alarmObjectsId=MT2FE7B/alarmEntryId=13422*Can not hangup, resource still attached*Unspecified minor alarm in the LI_
07/04/06*09:30:29*minor*snmpSystemId=MT2FE7B/privateId=MT2FE7B/alarmsId=MT2FE7B/alarmObjectsId=MT2FE7B/alarmEntryId=13428*Can not hangup, resource still attached*Unspecified minor alarm in the LI_
07/05/06*07:47:08*minor*snmpSystemId=MT2FE2B/privateId=MT2FE2B/alarmsId=MT2FE2B/alarmObjectsId=MT2FE2B/alarmEntryId=9323*DEVICE=board:0,liu:6 ERRORNUM=105 ALARMCODE=1 ERRORTXT=Frame Slip*Frame Slip.
07/05/06*07:47:08*minor*snmpSystemId=MT2FE2B/privateId=MT2FE2B/alarmsId=MT2FE2B/alarmObjectsId=MT2FE2B/alarmEntryId=9323*DEVICE=board:0,liu:6 ERRORNUM=105 ALARMCODE=1 ERRORTXT=Frame Slip*Frame Slip.
----------
et le programme modefié est le suivant :
------
#!/usr/bin/perl
use warnings;use strict;
open F_LIRE,"test5.txt"
or die "E/S : $!\n";
my %h;
while ( <F_LIRE> ) {
chomp;
next if /^\s*$/;
s/snmp.*?=|\/pri.*(?=\*.*=)//gi;
$h{$_}++;
}
foreach (keys %h) {
my ($d,$h,$sev,$sys,$book,$f) = split /\*/,$_;
print "$d : $h : $sev : $sys : $book : $f\n";
}
<>;
---------
normalement je dois voir le résultat comme suit:
07/04/06 : 09:03:12 : indeterminate : MT2FE5B : Could not attach voice resource. : Unspecified application alarm.
07/05/06 : 07:47:08 : minor : MT2FE2B : DEVICE=board:0,liu:6 ERRORNUM=105 ALARMCODE=1 ERRORTXT=Frame Slip : Frame Slip.
07/04/06 : 09:30:29 : minor : MT2FE7B : Can not hangup, resource still attached : Unspecified minor alarm in the LI_
07/04/06 : 09:30:11 : minor : MT2FE7B : Can not hangup, resource still attached : Unspecified minor alarm in the LI_
07/04/06 : 09:03:12 : indeterminate : MT2FE5B : Could not attach voice resource. : Unspecified application alarm.
07/04/06 : 09:30:04 : minor : MT2FE7B : Can not hangup, resource still attached : Unspecified minor alarm in the LI_
07/04/06 : 09:30:08 : minor : MT2FE7B : Can not hangup, resource still attached : Unspecified minor alarm in the LI_
----
thx again
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
17 oct. 2006 à 13:03
17 oct. 2006 à 13:03
Re,
je vois pourquoi. je te dirai ce soir. je suis au boulot.
as-tu donner toutes les possibilités?
Could not
Can not
DEVICE
lami20j
je vois pourquoi. je te dirai ce soir. je suis au boulot.
as-tu donner toutes les possibilités?
Could not
Can not
DEVICE
lami20j
malhereusement oui,
ya d'autre possibilité car le fichier source est le résultat des trap SNMP :(
Merci.
ya d'autre possibilité car le fichier source est le résultat des trap SNMP :(
Merci.
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
17 oct. 2006 à 19:37
17 oct. 2006 à 19:37
Salut,
c'est normal que le script n'affiche pas ce que tu veux.
Quand on fait split en utilisant le séparateur l'étoile *, vu que tu as une étoile aussi avant
*Unspecified application alarm. on ne stocke pas ce qu'on trouve après la dernière étoile.
Donc il nous faut une variable de plus. En gras tu as les modifications
c'est normal que le script n'affiche pas ce que tu veux.
Quand on fait split en utilisant le séparateur l'étoile *, vu que tu as une étoile aussi avant
*Unspecified application alarm. on ne stocke pas ce qu'on trouve après la dernière étoile.
Donc il nous faut une variable de plus. En gras tu as les modifications
#!/usr/bin/perl use warnings;use strict; open F_LIRE,"test.txt" or die "E/S : $!\n"; my %h; while ( <F_LIRE> ) { chomp; next if /^\s*$/; s/snmp.*?=|\/pri.*(?=\d+\*)//gi; $h{$_}++; } foreach (keys %h) { my ($d,$h,$sev,$sys,$book,$book2) = split /\*/,$_; print "$d : $h : $sev : $sys : $book : $book2\n"; } __END__lami20j