J’ai été confronté au problème suivant :
Une application utilise un fichier XML pour son paramétrage (messages d’alerte, menus, etc.).
Si le fichier XML n’est pas disponible, l’application ne peut pas s’initialiser.
Une solution qui m’a semblée intéressante était de créer dans l’application une section data qui contiendrait les informations de base pour créer le fichier XML de paramétrage « par défaut » de l’application.
Le plus facile pour créer cette section data était de partir du fichier XML lui-même.
J’ai donc écrit ce petit bout de code pour générer un fichier dont le contenu est une section data qu’il suffit de recopier dans le code de l’application.
Si l’application détecte que son fichier de paramétrage n’est pas disponible, elle pourra le générer simplement à partir de ces data.
Code : Tout sélectionner
Enumeration #PB_Compiler_EnumerationValue
#FichierXML
#FichierData
EndEnumeration
; Choisir le fichier xml à convertir
leFichier$=OpenFileRequester("Choix du fichier XML à Dataïser",GetCurrentDirectory()+"*.xml","Fichier xml|*.xml",0)
; Extraire le chemin du fichier sélectionné
chemin$=GetPathPart(leFichier$)
; Lite le nom du fichier XML source
fichierXML$=GetFilePart(leFichier$)
; Construire le nom du fichier de sortie (Même nom que le fichier XML avec .data comme extension)
fichierData$=ReplaceString(fichierXML$,".xml",".data",#PB_String_NoCase)
; Test si le fichier XML peut être lu
If ReadFile(#FichierXML,leFichier$)
; Test si le fichier de sortie peut être créé
If CreateFile(#FichierData,chemin$+fichierData$)
; Ecriture de la première ligne
WriteStringN(#FichierData,"DataSection")
; Création de l'étiquette de la zone Data (chaîne "XML" plus nom du fichier source sans l'extension
WriteStringN(#FichierData,Chr(9)+"XML"+ReplaceString(GetFilePart(leFichier$),".xml",":",#PB_String_NoCase))
; Boucle de traitement des lignes du fichier XML
Repeat
; Lire la ligne courante dans le fichier source
ligneXML$=ReadString(#FichierXML)
; Retourner la chaine de caractères pour la nettoyer (enlever en fin de la ligne les espaces existants et les tabulations)
ligneXML$=ReverseString(ligneXML$)
; Si le caractère '>' est trouvé enlever tous les caractéres avant
If FindString(ligneXML$,">",1)
ligneXML$=Mid(ligneXML$,FindString(ligneXML$,">",1))
EndIf
; Remettre la ligne dans le bon ordre
ligneXML$=ReverseString(ligneXML$)
; Remplacer les " par "+chr(34+"
ligneData$=ReplaceString(ligneXML$,Chr(34),Chr(34)+"+Chr(34)+"+Chr(34))
; Traitement des tabulation de début de ligne
compteTab=CountString(ligneXML$,Chr(9))
If compteTab<>0
ligneData$=InsertString(ligneData$,Chr(34),compteTab+1)
ligneData$=ReplaceString(ligneData$,Chr(9),"Chr(9)+")
Else
ligneData$=Chr(34)+ligneData$
EndIf
; Ajouter l'instruction Data.s et " de fin de ligne
ligneData$="Data.s "+ligneData$+Chr(34)
; Enregistre la ligne dans le fichier
WriteStringN(#FichierData,Chr(9)+ligneData$)
Until Eof(#FichierXML)
; Marquer la fin des datas
WriteStringN(#FichierData,Chr(9)+"Data.s "+Chr(34)+"~Fin~"+Chr(34))
; Fermer la section data en fin de fichier
WriteStringN(#FichierData,"EndDataSection")
; Fermer le fichier de sortie
CloseFile(#FichierData)
Else
; Message d'erreur si le fichier de sortie n'a pu être créé
MessageRequester("Erreur","Impossible de créer le fichier '"+fichierData$+"'",#PB_MessageRequester_Ok)
EndIf
; Fermer le ficher XML
CloseFile(#FichierXML)
Else
; Message d'erreur si le fichier XML n'a pu être lu
MessageRequester("Erreur","Impossible d'ouvrir le fichier '"+fichierXML$+"'",#PB_MessageRequester_Ok)
EndIf