[R] Convertir les données de plusieurs fichiers .ini dans un seul tableau.

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Boulanza
Niveau 9
Niveau 9
Messages : 697
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

[R] Convertir les données de plusieurs fichiers .ini dans un seul tableau.

#1

Message par Boulanza »

Bonjour,
Je reçois plusieurs fiches ini qui regroupent des informations propre à chaque étudiant inscrit dans mon cours de formation à distance (Suite à la suspension des cours présentiels à cause du Covid-19). Le nombre des étudiants peut attendre facilement entre 500 à 1.000 personnes (fichier ini).
Le système E-learning: Autosatisfaction des profs, les étudiants sont majoritairement insatisfaits des cours interactifs à travers la plateforme de leur établissement/université : Aucune formation sur le système E-learning, faible débit de connexion… Pour détourner ces contraintes épineuses, l’ensemble des enseignants ont adopté le partage de documents sous différents formats (PDF, Word, PPT).
Question : Comment convertir plusieurs fichiers .ini dans un seul tableau afin de faciliter la gestion des étudiants inscrits dans mon cours et leurs permettent de télécharger le cours de formation.
Merci pour votre aide.
Cordialement
Exemple de fichier ini:
Func GetInfoEtudient01()
Application01()
;***  Coordonnées de l'étudiant.
If $A1 <> "" Then IniWrite(@ScriptDir & "\Config.ini", "parametres", "$Civilité", $A1)
If $A2 <> "" Then IniWrite(@ScriptDir & "\Config.ini", "parametres", "$Nom", $A2)
If $A3 <> "" Then IniWrite(@ScriptDir & "\Config.ini", "parametres", "$Prenom", $A3)
If $A4 <> "" Then IniWrite(@ScriptDir & "\Config.ini", "parametres", "$DateNaissence", $A4)
If $A5 <> "" Then IniWrite(@ScriptDir & "\Config.ini", "parametres", "$EmailAcadimique", $A5)
If $A6 <> "" Then IniWrite(@ScriptDir & "\Config.ini", "parametres", "EmailPersonnel", $A6)
If $A7 <> "" Then IniWrite(@ScriptDir & "\Config.ini", "parametres", "$GSM", $A7)
If $A8 <> "" Then IniWrite(@ScriptDir & "\Config.ini", "parametres", "$WatsApp", $A8)
If $A9 <> "" Then IniWrite(@ScriptDir & "\Config.ini", "parametres", "$CNE", $A9)
If $A10 <> "" Then IniWrite(@ScriptDir & "\Config.ini", "parametres", "$Formation", $A10)
If $A11 <> "" Then IniWrite(@ScriptDir & "\Config.ini", "parametres", "$UtilisateurPoste", $A11)
If $A11 <> "" Then IniWrite(@ScriptDir & "\Config.ini", "parametres", "$DomaineDuPoste", $A12)
EndFunc
Modifié en dernier par Boulanza le mar. 29 sept. 2020 20:10, modifié 2 fois.
Boulanza
Niveau 9
Niveau 9
Messages : 697
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

Re: [..] Convertir les données de plusieurs fichiers .ini dans un seul tableau.

#2

Message par Boulanza »

Bonjour ,
C'est ce type de tableau que je souhaite avoir comme solution, avec la condition d'ajouter plusieurs fichier in dans le même tableau.
Voir code ci-dessous du lien https://www.autoitscript.com/forum/topi ... -to-array/:
Cordialement.
#include <Array.au3>
$input = @ScriptDir & '\Config.ini'; example ini
If Not FileExists($input) Then
    MsgBox(48, 'Error', ' File Not Found ')
    Exit
EndIf
;
Global $output[1][1]; init ini array
;
_Ini_Array_Rows()
;
Func _Ini_Array_Rows()
    Local $ct, $sn, $rs; common declares
    Local $MaxKeyCt = 0; init max key counter
    Local $sn_tick = 0; init section counter
    $sn = IniReadSectionNames($input); read sections
    While 1; loop 1
        $sn_tick += 1; advance counter
        $rs = IniReadSection($input, $sn[$sn_tick]); read keys
        If @error = 1 Then ContinueLoop; If empty section then continue counting
        If $rs[0][0] > $MaxKeyCt Then $MaxKeyCt = $rs[0][0]; get max keys
        If $sn_tick = $sn[0] Then ExitLoop; exit loop when total reached
    WEnd
    ReDim $output[$sn[0]][$MaxKeyCt + 1]; resize needed array
    $sn_tick = 0; reset section counter
    While 1; loop 2
        $sn_tick += 1; advance counter
        $rs = IniReadSection($input, $sn[$sn_tick]); read keys and values
        If @error = 1 Then; If empty section
            $output[$sn_tick - 1][0] = $sn[$sn_tick]; then insert section name
            ContinueLoop
        EndIf
        For $ct = 1 To $rs[0][0]; loop 3
            $output[$sn_tick - 1][$ct] = $rs[$ct][1]; arrange array
        Next
        $output[$sn_tick - 1][0] = $sn[$sn_tick]; add section name to column 0
        If $sn_tick = $sn[0] Then ExitLoop; exit when done with last section
    WEnd
    Return $output
EndFunc
_ArrayDisplay($output, "Result"); display ini array (rows)
;
Global $output[1][1]; reset array
;
_Ini_Array_Columns()
;
Func _Ini_Array_Columns()
    Local $ct, $sn, $rs
    Local $MaxKeyCt = 0
    Local $sn_tick = 0
    $sn = IniReadSectionNames($input)
    While 1
        $sn_tick += 1
        $rs = IniReadSection($input, $sn[$sn_tick])
        If @error = 1 Then ContinueLoop
        If $rs[0][0] > $MaxKeyCt Then $MaxKeyCt = $rs[0][0]
        If $sn_tick = $sn[0] Then ExitLoop
    WEnd
    ReDim $output[$MaxKeyCt + 1][$sn[0]]
    $sn_tick = 0
    While 1
        $sn_tick += 1
        $rs = IniReadSection($input, $sn[$sn_tick])
        If @error = 1 Then
            $output[0][$sn_tick - 1] = $sn[$sn_tick]
            ContinueLoop
        EndIf
        For $ct = 1 To $rs[0][0]
            $output[$ct][$sn_tick - 1] = $rs[$ct][1]
        Next
        $output[0][$sn_tick - 1] = $sn[$sn_tick]
        If $sn_tick = $sn[0] Then ExitLoop
    WEnd
    Return $output
EndFunc
_ArrayDisplay($output, "Result"); display ini array (columns)
Exit
Boulanza
Niveau 9
Niveau 9
Messages : 697
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

Re: [..] Convertir les données de plusieurs fichiers .ini dans un seul tableau.

#3

Message par Boulanza »

Bonsoir,
En remplacent "parametres" par "$A9" = Code national de l'étudiant (CNE) (chaque étudiant a son propre code) ce qui a résolu le problème d'intégrer plusieurs fichiers.ini dans un seul fichier.ini soit dans notre cas "Config.ini"
Juste une petite question comment enregistré le tableau: "$Resultat01= _ArrayDisplay($output, "Result")" comme fichier dans @ScriptDir ?
Merci d'avance pour votre aide.
Cordialement.
Boulanza
Niveau 9
Niveau 9
Messages : 697
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

Re: [..] Convertir les données de plusieurs fichiers .ini dans un seul tableau.

#4

Message par Boulanza »

Bonjour,
Impossible de trouver de l'aide pour copier $Resultat01 du code ci-dessous et/ou pas de solution de copy tableau, notamment que la fonction _FileWriteFromArray() ne peut donc pas écrire un tableau, ceci a été confirmé par le site AutoIT anglais: https://www.autoitscript.com/forum/topi ... a-to-file/ :

The '1' is just telling you _ArrayDisplay() succeeded. I don't understand why you are trying to do anything else with that return value, and it's not an array, so you can't write it with _FileWriteFromArray().

Donc suite à cela, je ferme ce poste.

Code : Tout sélectionner

$Resultat01 = _ArrayDisplay($output, "Liste des étudiants du cours à distance: TEC", Default, 64+16, @TAB, "C.N.E|Civilité|Nom de famille|Prénom|Date de naissence|E-mail académique|Email personnel|Téléphone GSM|N° WhatsApp|C.N.E|Département|Utilisateur de poste|Domaine du poste")
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [R] Convertir les données de plusieurs fichiers .ini dans un seul tableau.

#5

Message par mikell »

La fonction _FileWriteFromArray() peut bien évidemment écrire un tableau dans un fichier, elle est faite pour ça - comme son nom l'indique et comme l'aide l'explique
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Boulanza
Niveau 9
Niveau 9
Messages : 697
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

Re: [R] Convertir les données de plusieurs fichiers .ini dans un seul tableau.

#6

Message par Boulanza »

Bonjour mikell,
Le résultat un fichier vide. Il faut avouer que je n'ai pas su placer les deux fonctions pour que ça marche.Bahhhhh
Cordialement.
$Resultat01 = _ArrayDisplay($output, "Liste des étudiants du cours à distance: TEC", Default, 64+16, @TAB, "C.N.E|Civilité|Nom de famille|Prénom|Date de naissence|E-mail académique|Email personnel|Téléphone GSM|N° WhatsApp|C.N.E|Département|Utilisateur de poste|Domaine du poste")
; Liste tous les fichiers du répertoire courant du script.
Local $aScriptDir = _FileListToArray($Resultat01) ===> $sFilePath c'est un fichier vide
Local $aScriptDir = _FileListToArray($output)    ===> $sFilePath c'
est un fichier sans tableau <> $Resultat01
; Crée un fichier dans le répertoire %TEMP% de l'utilisateur.
Local $sFilePath = @TempDir & "\Examples.txt"
; Ecrit un tableau dans un fichier en passant le nom du fichier.
_FileWriteFromArray($sFilePath, $aScriptDir, 1)
; Affiche le fichier.
ShellExecute($sFilePath)
Boulanza
Niveau 9
Niveau 9
Messages : 697
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

Re: [R] Convertir les données de plusieurs fichiers .ini dans un seul tableau.

#7

Message par Boulanza »

C'est la solution proposée par mikell:
#include <Array.au3>
#include <File.au3>
#include <MsgBoxConstants.au3>
Local $aRetArray, $sFilePath = @TempDir & "\Test.txt"
; Ecrit dans le fichier
_FileWriteFromArray($sFilePath, $output ,Default, Default, "|")
 Sleep(1000)
"C.N.E|Civilité|Nom de famille|Prénom|Date de naissence|E-mail académique|Email personnel|Téléphone GSM|N° WhatsApp|C.N.E|Département|Utilisateur de poste|Domaine du poste"
ne fonctionnera pas, c'est vraiment dommage.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [R] Convertir les données de plusieurs fichiers .ini dans un seul tableau.

#8

Message par mikell »

Boulanza a écrit : mer. 23 sept. 2020 20:33C'est la solution proposée par mikell
mikell n'a rien proposé du tout. mikell a juste apporté un rectificatif à une affirmation du post n°4 qui était fausse
D'ailleurs mikell n'a pas compris grand'chose aux messages précédents qui sont dans l'ensemble assez confus avec leur mélange improbable de ini, de tableau et de fichier

Si vraiment vous voulez de l'aide, cessez SVP de nous asséner des scripts qui ne sont pas forcément adaptés et que vous ne comprenez manifestement pas
Dans ce sujet par exemple où le titre est parfaitement clair, poser une question simple en fournissant juste un exemplaire de fichier ini du type à traiter serait beaucoup plus pertinent qu'imposer un vague bout de code copié d'un sujet du forum US vieux de 10 ans
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Boulanza
Niveau 9
Niveau 9
Messages : 697
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

Re: [R] Convertir les données de plusieurs fichiers .ini dans un seul tableau.

#9

Message par Boulanza »

Bonsoir,
mikell a écrit : mer. 23 sept. 2020 14:04 La fonction _FileWriteFromArray() peut bien évidemment écrire un tableau dans un fichier, elle est faite pour ça - comme son nom l'indique et comme l'aide l'explique
Je voulais dire la suggestion de Monsieur mikell. Votre idée est excellente, elle marche bien, mais pas pour les tableaux comme je l'ai expliqué clairement dans mes écrits.
Cordialement.
Répondre