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

Python Discussion :

Parser un fichier dont on connait la structure.


Sujet :

Python

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 31
    Points : 24
    Points
    24
    Par défaut Parser un fichier dont on connait la structure.
    Salut à tous, mes meilleurs voeux pour 2008

    je récupère un fichier (~ 40 Ko) qui a cet 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
    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
     
    -------------
    ?action=hosts
    -------------
    (get host list & information and online racers)
     
    requires:	-
    optional:	-
    returns:	HOST STRUCT:
     
    HOSTNAME        char[32]
    TMLT	        byte[4]
    TCRM            byte[4] // Track, Config, Reversed, Max players allowed
    CARS            ulong (4 bytes)
    RULES           ulong (4 bytes)
    LAPS            byte [1]
    QUALMINS        byte [1]
    spare           byte [1]
    spare           byte [1]
    NROFRACERS      byte[1]
    RACERNAMES      char[24 * NROFRACERS]
     
    LAPS work like this:
        L is the given Laps value
        0=practice
        1-100=laps
        101-190=110-1000 laps...  100+(L-100)*10
        191-238=1-48 hours... L-190
     
    TMLT means:
    Type		0 : old S1 / 1 : new S1 / 2 : S2
    Main		version times 10 (e.g. 3 means version 0.3)
    Letter		e.g. 'H' in 0.3H
    TestId		zero : official / non-zero : test patch id
     
    (*) TRC is in numbers:
    000 = bl1
    001 = bl1r
    010 = bl2
    ..
    220 = fe3
    221 = fe3r
    etc.
     
    cars bits:
        XFG          1
        XRG          2
        XRT          4
        RB4          8
        FXO          16
        LX4          32
        LX6          64
        MRT          128
        etc          etc
     
    rules bits :
        CAN_VOTE     1
        CAN_SELECT   2
        QUALIFY      4
        PRIVATE      8
        MODIFIED     16
        MIDRACEJOIN  32
        MUSTPIT      64
    j'aimerai relié un 'RACERNAMES' et son 'track' (juste le TRC) correspondant

    j'ai chercher sur le foraum à 'parser', mais, hélas, je tombe sur des liens relatifs aux fichier XML.

    je ne sais comment m'y prendre, n'y par quel bout attaquer. Si vous avez quelques idées ...

    en piece joint le fichier à traiter
    ex: sur quel track se trouve '- Glop -' ?
    Fichiers attachés Fichiers attachés

  2. #2
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Points : 1 257
    Points
    1 257
    Par défaut
    tu ouvre le fichier et le lit ligne par ligne
    tu défini une machine a état (chaque etat etant une partie du fichier) tu fait des test sur chaque ligne pour savoir si cela passe a un nouvelle etat
    sur chaque ligne tu peux faire un split(' ') pour récupérer un tableau de données de la ligne

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 31
    Points : 24
    Points
    24
    Par défaut
    salut anthyme,

    le fichier binaire n'est pas construit ligne par ligne (c'est un seul block de 47 Ko)
    et split(' ') ne m'est pas vraiment utile ici.

    j'accède au fichier par page=urllib.urlopen('http:// ...')
    et la charge par strpage=page.read()

    Ensuite, il me faut traiter cette grande chaîne comme décrit sur le 1'post
    je progresse lentement, mais je galère.
    strpage[52] me donne le nombre de joueur (NROFRACERS) dans un string qui contient 0 (zero) en hexa, comment le convertir en un nombre ?

    ------
    edit: ord() me retourne la valeur recherchée

  4. #4
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Points : 1 257
    Points
    1 257
    Par défaut
    bin dans ton exemple y a des retour a la ligne ...

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 31
    Points : 24
    Points
    24
    Par défaut
    Oublie les retours à la ligne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    HOST STRUCT:
     
    HOSTNAME        char[32]
    TMLT	        byte[4]
    TCRM            byte[4] // Track, Config, Reversed, Max players allowed
    CARS            ulong (4 bytes)
    RULES           ulong (4 bytes)
    LAPS            byte [1]
    QUALMINS        byte [1]
    spare           byte [1]
    spare           byte [1]
    NROFRACERS      byte[1]
    RACERNAMES      char[24 * NROFRACERS]
    ça x fois les nombre de serveurs
    byte est un octet (0 à 255).

Discussions similaires

  1. Parser un fichier en une structure de type arbre
    Par franquis dans le forum Langage
    Réponses: 2
    Dernier message: 17/01/2012, 00h52
  2. Réponses: 4
    Dernier message: 09/07/2010, 08h38
  3. [AC-2007] Récupérer le nom d'un fichier dont on ne connait qu'une partie ?
    Par tibofo dans le forum VBA Access
    Réponses: 2
    Dernier message: 14/04/2010, 16h52
  4. Recherche fichier dont on connait une partie du nom
    Par kluh dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/11/2008, 08h31
  5. [VB6] [Fichier] Enregistrer des variables de structure
    Par de.bo dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 07/10/2002, 11h09

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