Bonsoir Wiltech.
Au delà du fait que votre code ne fonctionne pas correctement (un } en trop à la fin + des lignes vides), votre script contient quelques incohérences.
Vous déclarez la variable
$emplacement
qui correspond au chemin + nom de fichier, mais ne l'utilisez pas dans le test de présence du fichier et les
FileOpen
...
Vous testez la présence du dossier pour le créer, alors qu'un
FileOpen
avec le flag
$FO_CREATEPATH
(8) fait la même chose, de plus, vous déclarez deux fois le tableau alors qu'une seule fois suffit.
Voici un code différent, mais qui fonctionne.
Code : Tout sélectionner
Local $uuid = "UUID"
Local $sizeDisk = "SIZEDISK"
Local $ssd = "SSD"
local $eligible = "ELIGIBLE"
; Déclaration des variables du chemin de fichier et des données mises en forme.
Local $FileJSON = @ScriptDir & "\JSON\InfoOrdi.json"
Local $Data = '{' & @CRLF & '"Nom_PC" : "' & @ComputerName & '",' & @CRLF & '"UUID" : "' & $uuid & '",' & @CRLF &'"Taille_Disk" : "' & _
$sizeDisk & '",' & @CRLF & '"RAM" : "' & $ssd & '",' & @CRLF & '"Eligible" : "' & $eligible & '"' & @CRLF & '}'
If Not FileExists($FileJSON) Then
; Création et ouverture du fichier InfoOrdi.json
$json = FileOpen($FileJSON, 2 + 8)
; Ecriture du fichier json
FileWrite($json,'[' & @CRLF & $Data & @CRLF & ']' & @CRLF)
Else
; Lecture du fichier
$sFile = FileRead($FileJSON)
; Recherche de l'emplacement des caractères } suivi d'un CRLF suivi d'un ]
$Count = StringInStr($sFile, "}" & @CRLF & "]")
; Nettoyage de la fin du fichier pour supprimer } avec ]
$sFile = StringTrimRight($sFile, StringLen($sFile) - $Count + 1)
; Ouverture du fichier InfoOrdi.json pour remplacement du texte
$json = FileOpen($FileJSON, 2)
; Ecriture des nouvelles données mises en forme.
FileWrite($FileJSON, $sFile & "}," & @CRLF & $Data & @CRLF & "]")
EndIf
; Fermeture du fichier InfoOrdi.json
FileClose($json)
Si vous êtes absolument sur que votre fichier json ne contiendra pas de LF ou CRLF en fin de fichier, vous pouvez remplacer :
Code : Tout sélectionner
; Recherche de l'emplacement des caractères } suivi d'un CRLF suivi d'un ]
$Count = StringInStr($sFile, "}" & @CRLF & "]")
; Nettoyage de la fin du fichier pour supprimer } avec ]
$sFile = StringTrimRight($sFile, StringLen($sFile) - $Count + 1)
Par
Code : Tout sélectionner
; Nettoyage de la fin du fichier pour supprimer } avec ]
$sFile = StringTrimRight($sFile, StringLen($sFile) - 4)
Enfin, si l'expression régulière ne vous fait pas peur, il y a aussi ce type de code que je trouve plus adapté et assez polyvalent :
Code : Tout sélectionner
Local $uuid = "UUID"
Local $sizeDisk = "SIZEDISK"
Local $ssd = "SSD"
local $eligible = "ELIGIBLE"
; Déclaration des variables du chemin de fichier et des données mises en forme.
Local $FileJSON = @ScriptDir & "\JSON\InfoOrdi.json"
Local $Data = '{' & @CRLF & '"Nom_PC" : "' & @ComputerName & '",' & @CRLF & '"UUID" : "' & $uuid & '",' & @CRLF &'"Taille_Disk" : "' & _
$sizeDisk & '",' & @CRLF & '"RAM" : "' & $ssd & '",' & @CRLF & '"Eligible" : "' & $eligible & '"' & @CRLF & '}'
If Not FileExists($FileJSON) Then
; Création et ouverture du fichier InfoOrdi.json
$json = FileOpen($FileJSON, 2 + 8)
; Ecriture du fichier json
FileWrite($json,'[' & @CRLF & $Data & @CRLF & ']' & @CRLF)
Else
; Remplace la séquence de caractères } suivi d'un CRLF suivi d'un ] par les nouvelles données encadrées des balises
$sFile = StringRegExpReplace(FileRead($FileJSON), '}\r\n]*', "}," & @CRLF & $Data & @CRLF & "]")
; Ouverture du fichier InfoOrdi.json pour remplacement du texte
$json = FileOpen($FileJSON, 2)
; Ecriture des nouvelles données mises en forme.
FileWrite($FileJSON, $sFile)
EndIf
; Fermeture du fichier InfoOrdi.json
FileClose($json)
Je ne doute pas que certains cadors de l'expression régulière améliorerons le motif de l'expression régulière afin de prendre en compte les différentes possibilités du retour à la ligne entre } et ] qui peuvent être un simple LF
ou un CRLF. ^^