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 PHP Discussion :

[Tableaux] Fichier LUA et PHP [Fait]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Mai 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 4
    Par défaut [Tableaux] Fichier LUA et PHP
    Bonjour à tous.

    J'aimerais savoir comment faire pour récupérer les informations contenues dans un fichier *.lua via PHP afin de déposer tout ceci dans une base de donnée mysql.

    Le fichier *.lua se présente comme suit...

    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
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
     
    JH_Main = {
    	["Accueil"] = 1,
    	["AddonVersion"] = "beta 9",
    	["DerPurge"] = "29 mai 2006 00h01",
    	["Profiler"] = 1,
    	["TrackZone"] = "",
    	["Minimap"] = 1,
    	["cc"] = {
    		["pnjs"] = 27,
    		["ts"] = 146,
    		["locs"] = 57,
    		["trainers"] = 221,
    		["quetes"] = 48,
    		["objets"] = 410,
    		["vendu"] = 69,
    		["containers"] = 1,
    		["monstres"] = 5,
    	},
    	["TrackerPage"] = 1,
    	["TrackPnj"] = "",
    	["TrackLoc"] = "",
    	["Calerte"] = 1,
    	["CollectorMetier"] = 1,
    	["Tracker"] = 0,
    	["TrackerTimer"] = 0.04400000348687172,
    	["ccn"] = {
    		["pnjs"] = "Hgarth",
    		["ts"] = "Rouleau de tissu en lin",
    		["locs"] = "Les Serres-Rocheuses (Stonetalon Mts) 49:57",
    		["trainers"] = "Ench. de gants (Force)",
    		["quetes"] = "Broie-l'acier",
    		["objets"] = "|cffffffff|Hitem:11130:0:0:1590919186|h[Bâtonnet runique en or]|h|r",
    		["vendu"] = "|cff1eff00|Hitem:15946:0:0:0|h[Sphère de mystique]|h|r",
    		["containers"] = "Sacoche de Noggle",
    		["monstres"] = "Tempétueux de poussière",
    	},
    	["Position"] = 160,
    	["Collector"] = 1,
    	["ProfilerPage"] = 1,
    	["TrackerZone"] = "Orgrimmar",
    	["ServeurList"] = {
    		["cser_Vol'jin"] = "Vol'jin",
    	},
    }
    JH_Collector = {
    	["pnjs"] = {
    		["pnj_Magar_Orgrimmar"] = {
    			["pnjfaction"] = "Horde",
    			["pnjloc"] = {
    				["pnjloc_Orgrimmar_63:50"] = "2||1||Orgrimmar||La Herse||58:44||63:50",
    				["pnjloc_Orgrimmar_63:49"] = "2||1||Orgrimmar||La Herse||58:44||63:49",
    			},
    			["pnjtype"] = "Humanoïde",
    			["pnjttip"] = "Magar|n|Tailleur - Expert|n|Niveau 35|n|Orgrimmar|n|JcJ",
    			["pnjnom"] = "Magar",
    			["pnjlvl"] = 35,
    			["pnjrepair"] = 0,
    		},
    	},
    	["ts"] = {
    		["Couture"] = {
    			["tsitem_6795:0"] = {
    				["tsquantite"] = "1||1",
    				["tsinfos"] = "Couture||Divers||Chemise blanche de bretteur||6795:0",
    				["tstools"] = "",
    				["tscompo"] = {
    					["tscompo_4291:0"] = "4291:0||1",
    					["tscompo_2324:0"] = "2324:0||2",
    					["tscompo_4305:0"] = "4305:0||3",
    				},
    			},
    		},
    		["Alchimie"] = {
    			["tsitem_3383:0"] = {
    				["tsquantite"] = "1||1",
    				["tsinfos"] = "Alchimie||Réserves||Elixir de Sagesse||3383:0",
    				["tstools"] = "",
    				["tscompo"] = {
    					["tscompo_3371:0"] = "3371:0||1",
    					["tscompo_785:0"] = "785:0||1",
    					["tscompo_2450:0"] = "2450:0||2",
    				},
    			},
    		},
    	},
    	["monstres"] = {
    		["mob_Géoseigneur du crépuscule"] = {
    			["mobnom"] = "Géoseigneur du crépuscule",
    			["moblvl"] = "59||60",
    			["sous"] = "192||823",
    			["mobtype"] = "Humanoïde||none",
    			["mobloc"] = {
    				["mobloc_Silithus_39:42"] = "1||1||Silithus||Campement du crépuscule||43:80||39:42",
    				["mobloc_Silithus_36:42"] = "1||1||Silithus||Campement du crépuscule||42:80||36:42",
    				["mobloc_Silithus_40:44"] = "1||1||Silithus||Campement du crépuscule||43:80||40:44",
    				["mobloc_Silithus_40:42"] = "3||1||Silithus||Campement du crépuscule||43:80||40:42",
    				["mobloc_Silithus_39:43"] = "2||1||Silithus||Campement du crépuscule||43:80||39:43",
    				["mobloc_Silithus_38:41"] = "1||1||Silithus||Campement du crépuscule||43:80||38:41",
    				["mobloc_Silithus_25:31"] = "1||1||Silithus||Poste du Crépuscule||41:79||25:31",
    			},
    			["mobcompte"] = 10,
    			["mobsort"] = "0||normal",
    			["droplist"] = {
    				["drop_14047:0"] = "3||2||2||14047:0",
    				["drop_20404:0"] = "6||1||1||20404:0",
    				["drop_20406:0"] = "1||1||1||20406:0",
    			},
    		},
    	["objets"] = {
    		["obj_2455:0"] = {
    			["objdisplay"] = "1||ffffffff||Interface\\Icons\\INV_Potion_70",
    			["objid"] = "2455:0",
    			["objstack"] = 5,
    			["objnom"] = "Potion de mana mineure",
    			["objequiploc"] = "",
    			["objtype"] = "Consommable||Réserves",
    			["objminlevel"] = 5,
    			["objtooltip"] = "Potion de mana mineure|n|Niveau 5 requis|n|Utiliser : Rend 140 Ã  180 points de mana.",
    		},
    	},
    }
    Merci par avance de votre réponse.

  2. #2
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    Salut !

    Il y a bien la solution qui consisterais à le parser à la main... :

    tu lis jusqu'au premier '=', tu as le nom de la variable principale

    ensuite, tu rentres dans une fonction récursive :
    ligne par ligne, tu récupère les couples nom/valeur et les stockes dans un tableau. Si ta valeur est une {, tu rappelles la fonction, pour créer un sous-tableau...

    la fonction s'arrette quand elle rencontre un }

    pour simplifier le traitement, tu peux te baser sur des exepressions régulières... du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    \},|\["([^"]+)"\]\s+=\s+("([^"]+)",|\{)
    http://fr.php.net/pcre pour plus d'infos sur les regexp...

    le pattern que je t'ai donné devrait pouvoir parser une ligne (avec preg_match), ensuite il te suffit de comparer ce qui a été pris pour différencier le comportement : fin de la fonction (rencontre de '},'), couple simple (toutes les prises sont renseignées), début d'un sous tableau (rencontre de '{' ) etc...
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  3. #3
    Futur Membre du Club
    Inscrit en
    Mai 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 4
    Par défaut
    L'ennuie c'est que je m'y connais vraiment pas trop en php, aurait tu un petit exemple...?

    Désolé de demander autant d'aide

  4. #4
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418

  5. #5
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418

  6. #6
    Futur Membre du Club
    Inscrit en
    Mai 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 4
    Par défaut
    Vi j'avais déjà vu des truc comme ça, mais comment récupérer ces informations pour les mettre dans une base de donnée mysql ?

  7. #7
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    bah...

    voilà une paire de fonction que j'ai pas testé (donc pas sûr à 100% que ça fonctionne, mais ça te donnera déjà une piste de recherche)

    il faut appeller la première (parse_lua) avec le nom du fichier en paramètre, le retour est un tableau avec un indice name (le nom de la variable principale) et un value (le tableau contenant toutes les données), ou false en cas d'erreur.

    si tu fais un var_dump sur le retour tu verras la strucuture du tableau

    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
    function parse_lua($file)
    {
          $content = file($file);
          $match = NULL;
          $result = NULL;
          if(!preg_match('<(\\S+)\\s+=\\s+\\{$>', $file[0], $match)) return false;
          $result = array('name' => $match[1], 'value' => NULL);
          $curr = 0;
          $result['value'] = parse_lua_content($content, $curr);
          if($result['value'] === false || preg_match('<\\}$>', $content[$curr]) === false) return false;
          return $result;
    }
     
    function parse_lua_content(&$content, &$curr)
    {
          $result = array();
          $match = NULL;
          while(isset($content[++$curr]) && (preg_match('<\\},?$>', $content[$curr]) !== false)) //tant qu'on est pas sur un '},' ou à la fin du fichier on continue
          {
                if(preg_match('<\\["([^"]+)"\\]\\s+=\\s+(([^,]+),|\\{)$>', $content[$curr], $match) === false) return false; //si la ligne n'est pas valide, erreur
                if($match[2] != '{') $result[$match[1]] = $match[3]; //valeur simple
                else //valeur tableau
                {
                      $result[$match[1]] = parse_lua_content($content, $curr);
                      if($result[$match[1]] === false) return false;
                }
          }
          if(!isset($content[$start])) return false; //si on est à la fin du fichier sans trouver de '},', erreur
          return $result;
    }
    bon, comme je te l'ai dit, j'ai pas testé la fonction, donc il est possible voir même probable qu'il y ait des erreurs dedans

    ensuite pour l'intégration à la BDD... documente-toi, tu as tout sur php.net

    PS : ça s'écrit 'kyuuketsuki' lol, il te manque un u (promi ^^)
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  8. #8
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    Offtopic : bah, les romanji, on les écrit bien comme on veut...

    http://en.wikipedia.org/wiki/Kyuuketsuki
    Citation Envoyé par Wikipedia
    Kyūketsuki (吸血鬼) is a Japanese vampire.
    À cause du "ū", j'imagine que l'on peut écrire "u" et "uu"...
    Il y ad'ailleurs un kyuketsuki.com et un kyuuketsuki.net...

  9. #9
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    [HS aussi]arf, quand j'essaie de le tapper : 吸血鬼 (u simple) 吸血鬼 (u double) les deux passent... effectivement, gomen ne [/HS aussi]

    alors 吸血鬼, ça marche ?
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

Discussions similaires

  1. [Excel] Comment lire des fichiers excel avec php?
    Par dear_rihab dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 02/11/2007, 12h38
  2. Réponses: 5
    Dernier message: 01/10/2006, 16h55
  3. Réponses: 2
    Dernier message: 20/11/2005, 18h54
  4. [Tableaux] cases à cocher et PHP
    Par tjoce dans le forum Langage
    Réponses: 5
    Dernier message: 20/10/2005, 10h06
  5. [SimpleXML] Comment faire pour transformer un fichier XML en PHP ?
    Par magic8392 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 23/09/2005, 16h22

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