Question Lecture d'un fichier --> en CSV

Plus d'informations
il y a 2 ans 9 mois - il y a 2 ans 9 mois #31027 par Fellerson
Bonjour Messieurs,

je me permets de vous contacter pour vous demander une piste : un tuto ou un début de script. Mon objectif est très simple : Parcourir le fichier qui suit (exemple) et remonter que la partie "PRICE_DATABSE" dans un fichier CSV.

Le résultat devrait être le suivant :
Colonne A : Article --> ART1
Colonne B : Prix --> mr

chaque article (ART1, ART2) en dessous de "AH" dispose de son prix dans "mr"

à titre d'info, ce fichier ressemble très fortement à du JSON mais ce n'est pas un JSON ! C'est un LUA.

Merci, merci beaucoup par avance.

PRICING_HISTORY = {
}
SHOPPING_LISTS = {
    {
        ["items"] = {
        },
        ["isRecents"] = 1,
        ["name"] = "Recherches récentes",
    }, -- [1]
}
PRICE_DATABASE = {
    ["__dbversion"] = 4,
    ["AH"] = {
        ["ART1"] = {
            ["H3883"] = 1000000,
            ["mr"] = 1000000,
        },
        ["ART2"] = {
            ["H3883"] = 53000,
            ["mr"] = 53000,
        },
    },
}

Dernière édition: il y a 2 ans 9 mois par Fellerson.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 2 ans 9 mois #31036 par Laurent Dardenne
Salut,
le mieux serait d'utiliser LUA pour relire facilement ce fichier et le transformer en CSV.

Sinon un bricolage en PS :
$file='c:\temp\datas.lua'
@'
PRICING_HISTORY = {
}
SHOPPING_LISTS = {
    {
        ["items"] = {
        },
        ["isRecents"] = 1,
        ["name"] = "Recherches récentes",
    }, -- [1]
}
PRICE_DATABASE = {
    ["__dbversion"] = 4,
    ["AH"] = {
        ["ART1"] = {
            ["H3883"] = 1000000,
            ["mr"] = 1000000,
        },
        ["ART2"] = {
            ["H3883"] = 53000,
            ["mr"] = 53000,
        },
    },
}
'@ > $file

$S=get-content $file -raw
#https://stackoverflow.com/a/18129472
$regex= "^[^{}]*" +
        "(" +
        "((?'Open'{)[^{}]*)+" +
        "((?'Close-Open'})[^{}]*)+" +
        ")*" +
        "(?(Open)(?!))$"
$s -match $regex
$s2=$matches.close

$s2 -match $regex
$Articles=$matches.close

Foreach ($Article in ($Articles -split "(`r`n`|`n)"))
{
  Write-Debug "article: $article"
  switch -regex ($Article)  {
   '\["(?<Nom>.*?)"\] = {' {Write-Debug "`tNom"; $O='a'|Select Nom,Prix; $O.Nom=$matches.Nom; continue}
   '\["mr"\] = (?<Prix>\d*),' {Write-Debug "`tPrix" ;  $O.Prix= $matches.Prix; Write-output $O; continue }
}
}

#qq infos sur la balancing group en regex dotnet

#https://stackoverflow.com/questions/17003799/what-are-regular-expression-balancing-groups

#https://docs.microsoft.com/fr-fr/dotnet/standard/base-types/grouping-constructs-in-regular-expressions?redirectedfrom=MSDN#balancing_group_definition

#https://docs.microsoft.com/fr-fr/dotnet/standard/base-types/regular-expression-language-quick-reference
La regex ne prend que le dernier groupe d'accolades couplées, elle ne correspond donc qu'a l'exemple donné, c'est du copier-coller qui tombe en marche ;-)

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 2 ans 9 mois - il y a 2 ans 9 mois #31038 par Fellerson
Réponse de Fellerson sur le sujet Lecture d'un fichier --> en CSV
Wow ! je suis bluffé !! merci beaucoup c'est exactement ça .. wow.....
 merci beaucoup

merci
Dernière édition: il y a 2 ans 9 mois par Fellerson.

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.069 secondes
Propulsé par Kunena