IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

amalgam dans les champ


Sujet :

Langage Perl

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 296
    Points : 73
    Points
    73
    Par défaut amalgam dans les champ
    Bonjour j'ai un petit souci avec mon script perl
    en fait le script parse un fichier .txt recupère les information puis les envoi dans une base de données MYSQL.
    le pbm maintenant c'est que : des fois il me donnent pas tout les variable qu'il récupère dans les bonne cases de la base de données.
    voila mon code perl
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    use strict;
    use warnings;
    use DBI;
     
    my $pDirectory;
    my $path =  "C:/Program Files/EasyPHP1-8/www/traitement/sources";
     
     
    opendir ($pDirectory,$path)
    or die ("Directory ".$path." can't be open!\n");
     
    my @Directory_list = readdir($pDirectory);	
    closedir ($pDirectory);
     
    foreach my $File (@Directory_list)
    {
        if( $File =~ m/\.txt$/ )
        {
            #.....VOILA MON CODE POUR TRAITER TOUS LES FICHIERS DE LA LISTE.............................
    open my ($src), '<', "$path/$File" or die "E/S : $!\n";
    		# Connect to the database.
    		my $dbh = DBI->connect( "DBI:mysql:database=tdm;host=localhost",
    	    "chakri", "farid", { 'RaiseError' => 1 } );
     
    		my $sth =
    		$dbh->prepare(
            "INSERT INTO srfil ( id_srfil, ct, date_srfil, heure_s, evt, am, etat_am, af, msg)". " VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)" );
     
     
    		# variable d'état pour savoir si l'on se trouve dans ule paragraphe qu'on veut imprimer ($in == 2), après une commande ($in == 1),
    		# ou en dehors de tout cela ($in == 0)
    		my $in = 0;
    		my ( $id_srfil, $ct, $date, $heure, $evt, $am, $etat, $af, $msg );
     
    		while (<$src>) {
    			if ( not $in and m/^====([\w\d]+)/ ) {
    			$ct = $1;
    			}
    			elsif ( not $in and my ($cmd) = (m/\s*SRFIL/) ) {
    			$in = 1;
    			}
    			elsif ( $in == 1 and m/^\s*TRAITEMENT ...... ACC/ ) {
    			$in = 2;
    			}
    			# dans le cas ou command == SRFIl
    			elsif ($in == 2	and m{^\s+(\d{2}\-\d{2}\-\d{2})/(\d{2})\s+\w{1}\s+(\d{2})\s+\w{2}\s+(\d{2})\s+EVT=(.*) $}x)
    			{
    				if ( defined $date ) {
    				$sth->execute( $id_srfil, $ct, $date, $heure, $evt, $am, $etat, $af, $msg )
    				or die "pb de requete : $DBI::errstr";
    				}
    			( $date, $heure, $evt, $am, $etat, $af, $msg ) = (undef) x 7;
    	        $date  = $1;
    			$heure = $2.':'.$3.':'.$4;
    			$evt   = $5;
    			}
    			elsif ($in == 2 
    				and m{^\s*/AM\s*=\s*([\w\d]+)\s*ETAT=(\w+)\s*AF\s*=\s*(.*)$}x 
    				or m{^\s*/AM\s*=\s*([\w\d]+)\s*ETAT=(\w+)$}x)
    			{
    			$am   = $1;
    			$etat = $2;
    			$af   = $3;
    			$id_srfil = $am.'_'.$date.'_'.$heure;
    			}
    			elsif ( $in == 2 and /\/\s*(.*)$/ ) {  #[\s\d]+
    			$msg .= " ".$1;
    			}
    			elsif ( $in == 2 and m/^\s*TRAITEMENT ...... EXC/ ) {
    			$in = 1;
    				if ( defined $date ) {
    				$sth->execute( $id_srfil, $ct, $date, $heure, $evt, $am, $etat, $af, $msg )
    				or die "pb de requete : $DBI::errstr";
    				}
    			( $date, $heure, $evt, $am, $etat, $af, $msg ) = (undef) x 7;		
    			}
    			elsif ( $in == 1 and m/^\s*EXC\s*$/ ) {
    			$in = 0;
    			}
    		}
    		close $src;
    		$dbh->disconnect;
            #.....VOILA LA FIN DE MON CODE POUR TRAITER TOUS LES FICHIERS DE LA LISTE.............................
        }
    }
    merci bcp de votre aide
    Images attachées Images attachées  

  2. #2
    Membre chevronné
    Avatar de Woufeil
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 1 076
    Points : 2 004
    Points
    2 004
    Par défaut
    Bonjour,

    Le problème vient certainement du parsing du fichier. Es-tu sûr que la structure de chaque ligne du fichier est la même que celle de la précédente ? Si oui, quelle est cette forme ?
    "En essayant continuellement, on finit par réussir. Donc : plus ça rate, plus on a de chances que ça marche" (devise Shadock)
    Application :

    ainsi qu'à regarder la avant de poser une question.

    La rubrique Perl recrute, contactez-moi.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 296
    Points : 73
    Points
    73
    Par défaut
    bonjour,
    effectivement la structure n'est pas la même
    voila les deux structure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
        07-07-10/00 H 03 MN 24 EVT=02 :DEBUT INIT.
          /AM = SMA3 ETAT=BLOS AF=PUPE3+ETA3
          / 0202 0707 1000 0324 0362 0154 0182 0000 0000 0000 0000 0000
          / 12AF 10
        07-07-10/00 H 03 MN 24 EVT=21 :DEMANDE DE POSIT.
          /AM = SMA3 ETAT=BLOS AF=PUPE3+ETA3
          / 0215 0707 1000 0324 0362 0154 0182 0000 0000 0000 0000 0000
          / 12AC 1100 0210 0000 0000 0100 6003 6000 2080 0000 6003 60
        07-07-10/00 H 04 MN 20 
          /AM = SMA3 ETAT=ES   AF=PUPE3+ETA3
          / 0203 0707 1000 0420 0362 0154 0182 0000 0000 0000 0000 0000
          / 11AE 1100 0003 6211 0001 5401 8001 8201 0000 0000 0000 0000
          / 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 00
    des fois il ya présence de af et des fois pas
    et je l'ai pris en considération dans mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    ....
    			elsif ($in == 2 
    				and m{^\s*/AM\s*=\s*([\w\d]+)\s*ETAT=(\w+)\s*AF\s*=\s*(.*)$}x 
    				or m{^\s*/AM\s*=\s*([\w\d]+)\s*ETAT=(\w+)$}x)
    			{
    			$am   = $1;
    			$etat = $2;
    			$af   = $3;
    			$id_srfil = $am.'_'.$date.'_'.$heure;
    			}
    ...
    merci bcp de votre aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. inserer de longues donn dans les champs
    Par zorian dans le forum Outils
    Réponses: 5
    Dernier message: 29/06/2006, 20h39
  2. Accent dans les champs
    Par Alexlesilex dans le forum Installation
    Réponses: 10
    Dernier message: 17/05/2006, 13h15
  3. Comment entrer des formules chimiques dans les champs access
    Par Monbasinstinct dans le forum Access
    Réponses: 18
    Dernier message: 06/04/2006, 17h39
  4. Bloquer la saisie dans les champs
    Par zorba49 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 27/02/2006, 16h07
  5. ADO et les guillemet dans les champs d'une base Texte
    Par jnc dans le forum Bases de données
    Réponses: 3
    Dernier message: 27/10/2005, 08h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo