Page 1 sur 1

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

Posté : mar. 22 sept. 2020 12:06
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

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

Posté : mar. 22 sept. 2020 13:59
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

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

Posté : mar. 22 sept. 2020 23:08
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.

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

Posté : mer. 23 sept. 2020 11:10
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")

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

Posté : mer. 23 sept. 2020 14:04
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

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

Posté : mer. 23 sept. 2020 14:12
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)

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

Posté : mer. 23 sept. 2020 20:33
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.

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

Posté : mer. 23 sept. 2020 22:11
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

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

Posté : mer. 23 sept. 2020 22:26
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.