Comment crée Table a partir d'un fichier .txt ? [Résolu/Fermé]

Signaler
Messages postés
84
Date d'inscription
vendredi 19 juillet 2013
Statut
Membre
Dernière intervention
31 août 2017
-
Messages postés
1428
Date d'inscription
mercredi 29 juillet 2009
Statut
Contributeur
Dernière intervention
24 janvier 2019
-
Bonjour mes dames et messieurs,
Je veut crée et actualiser une table MySQL en fonction de ce fichier .txt :
"STEAM_0:1:123456789" 
{
"name" "Simon1"
"deny"
{
}
"allow"
{
}
"group" "admin"
}
"STEAM_0:1:123456789"
{
"allow"
{
}
"name" "Simon2"
"deny"
{
}
"group" "moderator"
}
"STEAM_0:1:123456789"
{
"deny"
{
}
"allow"
{
}
"name" "Simon3"
"group" "superadmin"
}
"STEAM_0:1:123456789"
{
"deny"
{
}
"allow"
{
}
"name" "Simon4"
"group" "fondator"
}

Est-ce que c'est possible ? Avec des Requettes MySQL ?
Je pense que c'est du json
En revoir.
j'espere que la ya la politesse !

1 réponse

Messages postés
111
Date d'inscription
jeudi 7 juin 2007
Statut
Membre
Dernière intervention
24 avril 2016
27
Salut,

Je sais pas si c'est un pb de formatage ou si ton fichier et formatté comme çà mais en tout cas là tel quel çà ressemble à du JSON par contre il manque les ":" .

Et du coup je suis pas sûr de bien comprendre ce que tu veux faire ...

En tout cas si c'est pour créer un table, j'en ferai un table avec 3 colonnes : deny:booleen, name:string et group;string (allow semble se répéter avec deny ici)


Par contre pour alimenter la table va falloir parcourir ton fichier json (si c'est vraiment du JSON) et pour chaque objet l'insérer dans la table précédente

Après si ta question c'est : Est-ce qu'il y a un moyen magique de créer un table et l'alimenter directement à partir de ce fichier JSON ? Je ne pense pas ... va falloir travailler un peu ;)
Messages postés
1428
Date d'inscription
mercredi 29 juillet 2009
Statut
Contributeur
Dernière intervention
24 janvier 2019
88
Je dirais aucun langage en particulier, c'est du lua qui produit ça mais je ne pense pas que ça ait un rapport avec le langage, les structures en lua sont différentes.
Messages postés
84
Date d'inscription
vendredi 19 juillet 2013
Statut
Membre
Dernière intervention
31 août 2017
>
Messages postés
1428
Date d'inscription
mercredi 29 juillet 2009
Statut
Contributeur
Dernière intervention
24 janvier 2019

Tu serai le convertir avec du code php en json ?
Messages postés
1428
Date d'inscription
mercredi 29 juillet 2009
Statut
Contributeur
Dernière intervention
24 janvier 2019
88
Pourquoi le convertir en json, tu veux juste extraire les données pour les persister dans une table c'est bien ça ?
Messages postés
84
Date d'inscription
vendredi 19 juillet 2013
Statut
Membre
Dernière intervention
31 août 2017

Oui
Messages postés
1428
Date d'inscription
mercredi 29 juillet 2009
Statut
Contributeur
Dernière intervention
24 janvier 2019
88
On peut utiliser un lexer pour parser ce genre de structure par exemple : https://github.com/nikic/Phlexy (installable via composer)

Après faut voir si ça couvre tous les cas. J'ai repris ce qu'il y'avait après STEAM_ pour définir l'id mais je ne sais pas ce que tu veux exactement à toi de modifier en conséquence.

<?php

require "vendor/autoload.php";

$data = '"STEAM_0:1:123456789"
{
 "name" "Simon1"
 "deny"
 {
 }
 "allow"
 {
 }
 "group" "admin"
}
"STEAM_0:1:123456789"
{
 "allow"
 {
 }
 "name" "Simon2"
 "deny"
 {
 }
 "group" "moderator"
}
"STEAM_0:1:123456789"
{
 "deny"
 {
 }
 "allow"
 {
 }
 "name" "Simon3"
 "group" "superadmin"
}
"STEAM_0:1:123456789"
{
 "deny"
 {
 }
 "allow"
 {
 }
 "name" "Simon4"
 "group" "fondator"
}
';

$factory = new Phlexy\LexerFactory\Stateless\Simple(
    new Phlexy\LexerDataGenerator
);

$lexer = $factory->createLexer(array(
    '"STEAM_(\d+:\d+:\d+)"\s*{'                                 => 0,
    '\s*"(name|group|allow|deny)"\s*(?:"(.+?)"|\s*{.*?\s*}\s*)' => 1,
    '\s*}\s*'                                                   => 2,
));

$tokens = $lexer->lex($data);

$results = [];
$result  = [];

foreach($tokens as $token){
    if ($token[0] === 0) {
        $result       = [];
        $result['id'] = $token[3][1];
    } else if($token[0] === 2) {
        $results[] = $result;
    } else if($token[0] === 1 && ($token[3][1] === "group" || $token[3][1] === "name")){
        $result[$token[3][1]] = $token[3][2];
    }
}

var_dump($results);



On obtient :

array(4) {
  [0]=>
  array(3) {
    ["id"]=>
    string(13) "0:1:123456789"
    ["name"]=>
    string(6) "Simon1"
    ["group"]=>
    string(5) "admin"
  }
  [1]=>
  array(3) {
    ["id"]=>
    string(13) "0:1:123456789"
    ["name"]=>
    string(6) "Simon2"
    ["group"]=>
    string(9) "moderator"
  }
  [2]=>
  array(3) {
    ["id"]=>
    string(13) "0:1:123456789"
    ["name"]=>
    string(6) "Simon3"
    ["group"]=>
    string(10) "superadmin"
  }
  [3]=>
  array(3) {
    ["id"]=>
    string(13) "0:1:123456789"
    ["name"]=>
    string(6) "Simon4"
    ["group"]=>
    string(8) "fondator"
  }