

Voilà le topo :
- une page web (non présentée ici) propose un QCM
- le code http utilise un formulaire de type POST pour générer un fichier réponse
- le fichier réponse est stocké sur le serveur web, attendant d'être traîté
Voici le code pour automatiser le traitement avec :
- connexion au serveur FTP par fichier de paramètre modifiable
- gestion multilingue de l'interface graphique
- gestion automatique d'un nouveau fichier de solution
- multiples QCM pouvant être traités d'après des solutions distinctes
- descente et traitement des QCM (que j'appelle ici des TNA, pour Training Needs Assessment)
Les pré-requis sont détaillés dans le menu d'aide du code :
- nom des fichiers à traiter prefixeJJMM.txt
- format des réponses à traiter Q1 ou Q01 à Q99
- séparateur de champs, le pipe |
- autres champs, nom, prenom ...
- fichiers à traités sous repertoire ./tna sur le serveur ftp
- fichiers descendus localement sous repertoire ./treated
Le code repose sur 4 fichiers + préférences linguistiques ... je vous le donne en plusieurs messages.
Pour l'analyse du code, le fichier TNA.pb présente l'interface graphique et le choix des menus.
Les menus de la fenêtre principale sollicitent soit du code directement rédigé, soit font appel à des procédures.
La plupart des petites procédures sont dans le code du fichier TNA, et 2 autres fichiers se partagent les tâches longues ou vraiment distinctes du reste du code :
- TNA_treatment, pour bien séparer l'analyse des fichiers du reste du code
- TNA_saveas, code pratiquement récupérable pour la fenêtre de sauvegarde
Reste le fichier du menu, et le fichier des langues.
N'est pas présenté le fichier ftp_settings car il sera créé depuis l'interface graphique à l'initiative de l'utilisateur, en cryptant le password ftp.
En respectant les pré-requis, vous pouvez récupérer le code tel quel et traiter les QCM de votre serveur FTP.
Cheers

Fichier 1/5 - TNA.pb - 565 lignes
Code : Tout sélectionner
;- Window Constants
InitNetwork()
Global MainChaine$
Global dec.S = Space(1024) , enc.S = Space(1024)
Global myServer.S, myUser.S, myPass.S,myPass2display$
Global suffixe.l
Enumeration
#Window_0
#Window_saveas
#thatfile
#TexteEnTete
#TextePrincipal
#StringPrincipal
#myfile
#myotherfile
#myftp
#mylocaldir
#myfr3D1
#myfr3D2
#myfr3D3
#LaDate
#TexteSaisie
#radioEN
#radioFR
#radioCU
#my_window_Language
#ButtonOKtoDL
#ButtonOKtoTreat
EndEnumeration
IncludeFile "TNA_menu.pb"
IncludeFile "TNA_treatment.pb"
IncludeFile "TNA_saveas.pb"
Structure FichierFTP
Nom$
sjour$
smois$
Taille.l
MaDate.l
DeleteOK.b
ToUpload.b
EndStructure
;{ Definitions
Define FileOK$
Define.b nbTreated=0, nbDeleted=0, nbCopyed=0,nbFileTuUpload=0
;}
;{ Langues pref
DataSection
StartFile0:
IncludeBinary "langues.pref"
EndFile0:
EndDataSection;}
;{vérification, lecture et au besoin création d'un nouveau fichier de préférences adaptable
Pref=OpenPreferences(GetCurrentDirectory()+"langues.pref")
If Pref=0 ; comme ça il ne le fait pas à chaque fois !
Size=?EndFile0-?StartFile0
CreateFile(0,GetCurrentDirectory()+"langues.pref")
WriteData(0, ?StartFile0,Size)
CloseFile(0)
EndIf;}
Macro RPS
ReadPreferenceString
EndMacro
Procedure readFTPsettings()
If ReadFile(#myfile,"ftp_settings")
myServer.S=ReadString(#myfile)
myUser.S=ReadString(#myfile)
theString.S=ReadString(#myfile)
Base64Decoder(@theString.S, Len(theString), @dec, 1024)
myPass.S=dec
myPass2display$=theString
CloseFile(#myfile)
ProcedureReturn 1
Else
ProcedureReturn 0
EndIf
EndProcedure
Procedure setFTPsettings(servername.S, ftpuser.S,ftppass.S )
Debug servername+ftpuser+ftppass
If CreateFile(#myfile,"ftp_settings") ; création d'un nouveau fichier texte...
Base64Encoder(@ftppass.S, Len(ftppass), @enc, 1024)
WriteStringN(#myfile, servername.S) ; écriture de 10 lignes (suivies du code 'Fin de Ligne')
WriteStringN(#myfile, ftpuser.S) ; ajoute 10 chaînes sur la même ligne (le code 'Fin de Ligne' n'est pas ajouté)
Debug enc
WriteStringN(#myfile, enc)
CloseFile(#myfile) ; ferme le fichier précédemment ouvert et enregistre les données
ProcedureReturn 1
Else
ProcedureReturn 0
EndIf
EndProcedure
Procedure downloadFiles(QuelSuffixe)
NewList NomFichier.FichierFTP()
MainChaine$=""
If OpenFTP(#myftp, myServer.S, myUser.S,myPass.S)
SetFTPDirectory(#myftp,"/tna")
If ExamineFTPDirectory(#myftp)
While NextFTPDirectoryEntry(#myftp)
If FTPDirectoryEntryType(#myftp) = 1
AddElement(NomFichier())
With NomFichier()
\Nom$ = FTPDirectoryEntryName(#myftp)
\sjour$=Mid(\Nom$,Len(\Nom$)-7,2)
\smois$=Mid(\Nom$,Len(\Nom$)-5,2)
\Taille = FTPDirectoryEntrySize(#myftp)
\MaDate.l = Val(\smois$)*100+Val(\sjour$)
EndWith
EndIf
Wend
EndIf
SortStructuredList(NomFichier(), #PB_Sort_Ascending, OffsetOf(FichierFTP\MaDate.l), #PB_Sort_Long)
nbTreated=ListSize(NomFichier())
MainChaine$=""
ForEach NomFichier()
If NomFichier()\MaDate>=QuelSuffixe
Resultat = ReceiveFTPFile(#myftp, NomFichier()\Nom$, "treated\"+NomFichier()\Nom$ )
If Resultat=1
nbCopyed.b+1
MainChaine$+NomFichier()\Nom$+ Chr(13)
EndIf
EndIf
Next
CloseFTP(#myftp)
ProcedureReturn nbCopyed
Else
MessageRequester(RPS("messagewarning","Avertissement"),RPS("noconnexion","Connexion impossible !"))
EndIf
EndProcedure
Procedure deleteFiles()
NewList FichierAEffacer.FichierFTP()
If OpenFTP(#myftp, myServer.S, myUser.S,myPass.S)
SetFTPDirectory(#myftp,"/tna")
If ExamineFTPDirectory(#myftp)
While NextFTPDirectoryEntry(#myftp)
If FTPDirectoryEntryType(#myftp) = 1
AddElement(FichierAEffacer())
FichierAEffacer()\Nom$ = FTPDirectoryEntryName(#myftp)
EndIf
Wend
EndIf
SortStructuredList(FichierAEffacer(), #PB_Sort_Ascending, OffsetOf(FichierFTP\Nom$), #PB_Sort_String)
nbTreated=ListSize(FichierAEffacer())
MainChaine$=""
ForEach FichierAEffacer()
FichierAEffacer()\DeleteOK=DeleteFTPFile(#myftp, FichierAEffacer()\Nom$)
If FichierAEffacer()\DeleteOK=1
MainChaine$+FichierAEffacer()\Nom$+ Chr(13)
nbDeleted+1
Else
MessageRequester(RPS("messagewarning","Avertissement"),RPS("nodeletion","Fichier impossible à effacer")+" : "+FichierAEffacer()\Nom$)
EndIf
Next
CloseFTP(#myftp)
ProcedureReturn nbDeleted
Else
MessageRequester(RPS("messagewarning","Avertissement"),RPS("noconnexion","Connexion impossible !"))
EndIf
EndProcedure
Procedure deleteLocal()
keeplocaldir$=GetCurrentDirectory()
SetCurrentDirectory("treated\")
Resultat$ = GetCurrentDirectory()
MainChaine$=""
nbDeleted=0
If ExamineDirectory(#mylocaldir, Resultat$, "*.txt")
While NextDirectoryEntry(#mylocaldir)
If DirectoryEntryType(#mylocaldir) = #PB_DirectoryEntry_File
LeFichier.S=DirectoryEntryName(#mylocaldir)
If DeleteFile(LeFichier.S)
nbDeleted+1
MainChaine$=MainChaine$+LeFichier.S+Chr(13)
Else
MessageRequester(RPS("messagewarning","Avertissement"),RPS("nodeletion","Fichier impossible à effacer")+" : "+LeFichier.S)
EndIf
EndIf
Wend
FinishDirectory(#mylocaldir)
EndIf
SetCurrentDirectory(keeplocaldir$)
ProcedureReturn nbDeleted
EndProcedure
Procedure uploadFiles()
NewList FichiersToUpload.FichierFTP()
If OpenFTP(#myftp, myServer.S, myUser.S,myPass.S)
SetFTPDirectory(#myftp,"/tna")
keeplocaldir$=GetCurrentDirectory()
SetCurrentDirectory("treated\")
Resultat$ = GetCurrentDirectory()
MainChaine$=""
If ExamineDirectory(#mylocaldir, Resultat$, "*.*")
While NextDirectoryEntry(#mylocaldir)
If DirectoryEntryType(#mylocaldir) = #PB_DirectoryEntry_File
AddElement(FichiersToUpload())
FichiersToUpload()\Nom$=DirectoryEntryName(#mylocaldir)
EndIf
Wend
SortStructuredList(FichiersToUpload(), #PB_Sort_Ascending, OffsetOf(FichierFTP\Nom$), #PB_Sort_String)
nbTreated=ListSize(FichiersToUpload())
ForEach FichiersToUpload()
Resultat=SendFTPFile(#myftp,FichiersToUpload()\Nom$,FichiersToUpload()\Nom$)
If Resultat=1
FichiersToUpload()\ToUpload=0
nbCopyed.b+1
MainChaine$+FichiersToUpload()\Nom$+Chr(13)
Else
FichiersToUpload()\ToUpload=1
nbFileTuUpload.b+1
EndIf
Next
FinishDirectory(#mylocaldir)
EndIf
CloseFTP(#myftp)
SetCurrentDirectory(keeplocaldir$)
Else
MessageRequester(RPS("messagewarning","Avertissement"),RPS("noconnexion","Connexion impossible !"))
EndIf
EndProcedure
;{ Fenetre Language
If OpenWindow(#my_window_Language, 368, 138, 160, 41, "Language", #PB_Window_ScreenCentered |#PB_Window_TitleBar )
OptionGadget(#radioEN, 50, 10, 40, 20, "EN") ;Les 3 options apparaissent sous forme de bouton Radio
OptionGadget(#radioFR, 10, 10, 40, 20, "FR") ;un seul choix possible, donc
OptionGadget(#radioCU, 90, 10, 80, 20, "Custom")
EndIf;}
;{ Repeat Fenetre language
Repeat
EventID = WaitWindowEvent()
If EventID = #PB_Event_Gadget
Select EventGadget()
Case #radioEN
PreferenceGroup("EN")
Case #radioCU
PreferenceGroup("CU")
Default
PreferenceGroup("FR")
EndSelect
EndIf
Until EventID = #PB_Event_Gadget ;Dès la sélection d'une langue, la fenêtre se ferme
CloseWindow(#my_window_Language)
;}
;{ Fenetre Principale
largeur=700
hauteur=700
If OpenWindow(#Window_0, 216, 0, largeur, hauteur, "TNA", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_TitleBar )
If CreateMenu(#MenuBar_0, WindowID(#Window_0))
affiche_menu() ;appel de procédure d'affichage du menu au lancement
DisableMenuItem(#MenuBar_0, #MENU_FUpload, 1)
;DisableMenuItem(#MenuBar_0, #MENU_FSaveas, 1)
EndIf
TextGadget(#TexteEnTete,15,20,largeur-280,15,"")
TextGadget(#TexteSaisie,15,57,largeur-280,15,"")
DateGadget(#LaDate, 15, 52, 120, 25, "Date : %dd/%mm/%yyyy")
SetGadgetAttribute(#LaDate,#PB_Date_Maximum,Date())
ButtonGadget(#ButtonOKtoDL,180,52,25,25,"OK")
ButtonGadget(#ButtonOKtoTreat,180,52,25,25,"OK")
Frame3DGadget(#myfr3D3,5,95,largeur-10,hauteur-120,"",#PB_Frame3D_Double)
TextGadget(#TextePrincipal,15,110,largeur-30,hauteur-150,"")
HideGadget(#LaDate,1)
HideGadget(#ButtonOKtoTreat,1)
HideGadget(#ButtonOKtoDL,1)
EndIf
;}
;{ Repeat Fenetre Principale
Repeat
EventID = WaitWindowEvent()
If EventID=#PB_Event_Gadget
;{
Select EventGadget()
Case #ButtonOKtoDL ; on a validé le download en appuyant sur le bouton OK
;{
SetGadgetText(#TextePrincipal,RPS("textedownloadwait","Veuillez patienter le temps du téléchargement ..."))
LaDate$=GetGadgetText(#LaDate)
suffixeday=Val(Mid(LaDate$,8,2))
suffixemonth=Val(Mid(LaDate$,11,2))
suffixe=suffixeday+suffixemonth*100
;Debug LaDate$ + Str(suffixeday) + Str(suffixemonth) + Str(suffixe)
If readFTPsettings()
nbDownloaded=downloadFiles(suffixe)
MainChaine$=RPS("textedownloadok","Fichiers correctement téléchargés") + " : " + Str(nbDownloaded) +Chr(13)+Chr(13)+MainChaine$
Else
MainChaine$=RPS("textftpviewok", "Fichier des paramètres FTP introuvable : ") + " ftp_settings"
EndIf
SetGadgetText(#TextePrincipal,MainChaine$)
;}
Case #ButtonOKtoTreat ; on a validé le traitementen appuyant sur le bouton OK
;{
LaDate$=GetGadgetText(#LaDate)
suffixeday=Val(Mid(LaDate$,8,2))
suffixemonth=Val(Mid(LaDate$,11,2))
suffixe=suffixeday+suffixemonth*100
LeRepertoire$ = GetCurrentDirectory()
MainChaine$=""
FindPrefixe(LeRepertoire$)
SetGadgetText(#TextePrincipal,MainChaine$)
SetCurrentDirectory(LeRepertoire$)
DisableMenuItem(#MenuBar_0, #MENU_FSaveas, 0)
;}
EndSelect
EndIf
;}
If EventID = #PB_Event_Menu
;{
HideGadget(#LaDate,1)
HideGadget(#ButtonOKtoDL,1)
HideGadget(#ButtonOKtoTreat,1)
SetGadgetText(#TexteEnTete,"")
SetGadgetText(#TexteSaisie,"")
Select EventGadget()
Case #MENU_FUpload ; Remonter les fichiers vers le serveur
;{
Debug "Menu FUpload"
SetGadgetText(#TexteEnTete,RPS("enteteupload","CHARGER DES FICHIERS SUR LE SERVEUR FTP"))
SetGadgetText(#TexteSaisie,RPS("textconnexionwait","Connexion en cours ..."))
If readFTPsettings()
uploadFiles()
Else
MainChaine$=RPS("nosettings","paramètres de connexion introuvables")+" : ftp_settings"
EndIf
SetGadgetText(#TexteSaisie,RPS("saisieupload","Depuis le répertoire .\treated"))
SetGadgetText(#TextePrincipal,MainChaine$)
;}
Case #MENU_FTreat ; Traiter les fichiers descendus
;{
Debug "Menu FTreat"
SetGadgetText(#TexteEnTete,RPS("enteteftreat","TRAITER LES FICHIERS TNA DESCENDUS LOCALEMENT DEPUIS LE ..."))
SetGadgetText(#TexteSaisie,RPS("jour","Jour")+" "+RPS("mois","Mois"))
HideGadget(#LaDate,0)
HideGadget(#ButtonOKtoTreat,0)
;}
Case #MENU_FDownload ; Descendre les fichiers TNA
;{
Debug "Menu FDownload"
SetGadgetText(#TexteEnTete,RPS("entetedownload","TELECHARGEMENT DES FICHIERS TNA DEPUIS LE ..."))
HideGadget(#LaDate,0)
SetGadgetText(#TextePrincipal,"")
HideGadget(#ButtonOKtoDL,0)
;}
Case #MENU_FSaveas
;{
SetGadgetText(#TexteEnTete,RPS("entetesaveas","SAUVEGARDER LES RESULTATS VERS UN FICHIER"))
SetGadgetText(#TexteSaisie,RPS("saisiesaveas","Le fichier peut être sauvé sous format .csv pour traitement par excel"))
MainChaine$=GetGadgetText(#TextePrincipal)
saveFileas(MainChaine$)
;}
Case #MENU_Copy
;{
SetClipboardText(GetGadgetText(#TextePrincipal))
MessageRequester(RPS("messageInfo","Information"),RPS("copyed","Le texte de la fenêtre principale est dans le presse-papier."))
;}
Case #MENU_LDelete; Effacer les fichiers TNA locaux
;{
SetGadgetText(#TexteEnTete,RPS("enteteldelete","SUPPRIMER LES FICHIERS LOCAUX"))
SetGadgetText(#TexteSaisie,RPS("saisieldelete","Les fichiers de solution ne sont pas concernés par cet effacement."))
Resultat=MessageRequester(RPS("messagewarning","Avertissement"),RPS("confirmdelete2","Êtes-vous sûr de vouloir supprimer les fichiers locaux ?"),#PB_MessageRequester_YesNo)
If Resultat=6
nbdelete=deleteLocal()
SetGadgetText(#TexteSaisie,RPS("localdeleteok","Les fichiers locaux suivants ont été supprimés :"))
MainChaine$=RPS("nbofdele","Nombre de fichiers effacés :") + " "+ Str(nbdelete) + Chr(13) + Chr(13)+ MainChaine$
Else
SetGadgetText(#TexteSaisie,RPS("nolocaldelete","Aucun fichier supprimé"))
MainChaine$=""
EndIf
SetGadgetText(#TextePrincipal,MainChaine$)
;}
Case #MENU_FDelete ; Effacer les fichiers TNA du serveur FTP
;{
SetGadgetText(#TexteEnTete,RPS("entetefdelete","SUPPRIMER LES FICHIERS DU SERVEUR FTP"))
SetGadgetText(#TexteSaisie,RPS("textconnexionwait","Connexion en cours ..."))
Resultat=MessageRequester(RPS("messagewarning","Avertissement"),RPS("confirmdelete","Êtes-vous sûr de vouloir supprimer les fichiers TNA du serveur ?"),#PB_MessageRequester_YesNo)
If Resultat=6
If readFTPsettings()
nbDeleted=deleteFiles()
MainChaine$=RPS("textedeleteok","Nombre de fichiers supprimés") + " : " + Str(nbDeleted) +Chr(13)+Chr(13)+MainChaine$
Else
MainChaine$=RPS("textftpviewok", "Fichier des paramètres FTP introuvable :") + " ftp_settings"
EndIf
Else
SetGadgetText(#TexteSaisie,RPS("connectionrefused","Connexion non établie"))
MainChaine$=RPS("nodelete","Demande de suppression non confirmée par l'utilisateur.")
EndIf
SetGadgetText(#TextePrincipal,MainChaine$)
SetMenuItemState(#MenuBar_0, #MENU_FDelete, 1)
DisableMenuItem(#MenuBar_0, #MENU_FUpload, 0)
;}
Case #MENU_Modify ; Changer les paramètres FTP
;{
SetGadgetText(#TexteEnTete,RPS("enteteftpset", "MODIFICATION DES PARAMETRES FTP"))
If readFTPsettings()
Resultat = CopyFile("ftp_settings", "ftp_settings.old")
EndIf
If Resultat
SetGadgetText(#TexteSaisie,RPS("settings_copied", "Le fichier de paramètres à été copié sous le nom :") + " ftp_settings.old")
EndIf
newserver$=InputRequester(RPS("messagesaisie","Saisie de données"),RPS("setservername","Entrez l'adresse du serveur FTP"),myServer.S )
newuser$=InputRequester(RPS("messagesaisie","Saisie de données"),RPS("setusername","Entrez le login utilisateur"),myUser.S )
newpass$=InputRequester(RPS("messagesaisie","Saisie de données"),RPS("setpassword","Entrez le password non crypté"),myPass2display$ )
If setFTPsettings(newserver$, newuser$,newpass$)
If readFTPsettings()
MainChaine$=myServer.S + Chr(13)+myUser.S+ Chr(13)+ myPass2display$
Else
MainChaine$=RPS("textftpviewok", "Fichier des paramètres FTP introuvable : ") + " ftp_settings"
EndIf
SetGadgetText(#TextePrincipal,MainChaine$)
EndIf
SetGadgetText(#TexteSaisie,RPS("textftpviewok", "Contenu du fichier") + " ftp_settings")
SetGadgetText(#TextePrincipal,MainChaine$)
;}
Case #MENU_ViewSettings ;Voir les paramètres FTP
;{
SetGadgetText(#TexteEnTete,RPS("enteteftpview", "PARAMETRES FTP ACTUELS"))
SetGadgetText(#TexteSaisie,RPS("textftpviewok", "Contenu du fichier") + " ftp_settings")
SetGadgetText(#TextePrincipal,"")
If readFTPsettings()
MainChaine$=myServer.S + Chr(13)+myUser.S+ Chr(13)+ "encrypted pass : " + myPass2display$
Else
MainChaine$=RPS("textftpviewok", "Fichier des paramètres FTP introuvable : ") + " ftp_settings"
EndIf
Debug myServer +myUser+ myPass
SetGadgetText(#TextePrincipal,MainChaine$)
;}
Case #MENU_FTPtest ;Test de Connexion FTP
;{
SetGadgetText(#TexteEnTete,RPS("enteteftptest", "TEST DE CONNEXION FTP"))
SetGadgetText(#TexteSaisie,RPS("textconnexionwait","Connexion en cours ..."))
SetGadgetText(#TextePrincipal,"...")
If readFTPsettings()
If OpenFTP(#myftp, myServer, myUser,myPass)
MainChaine$=RPS("textftpok","Test de connexion validé pour")+" "+myServer
CloseFTP(#myftp)
Else
MainChaine$=RPS("textftpko","Connexion impossible avec")+" "+myServer
EndIf
Else
MainChaine$=RPS("textftpko","Connexion impossible avec")+" "+myServer
EndIf
SetGadgetText(#TextePrincipal,MainChaine$)
;}
Case #MENU_HFields
;{
Debug "#Menu_HFields"
SetGadgetText(#TexteEnTete,RPS("entetehfields", "AIDE : LISTE DES CHAMPS ATTENDUS"))
SetGadgetText(#TexteSaisie,RPS("saisieehfields", "Les champs obligatoires sont marqués d'une *"))
MainChaine$=RPS("hquestions","* Q1 à Q99 ou Q01 à Q99")+Chr(13)
MainChaine$=MainChaine$+"* nom "+RPS("or","ou")+" lname" +Chr(13)
MainChaine$=MainChaine$+"* prenom "+RPS("or","ou")+" fname"+Chr(13)
MainChaine$=MainChaine$+"function"+Chr(13)
MainChaine$=MainChaine$+"title"+Chr(13)
MainChaine$=MainChaine$+"mail"+Chr(13)
MainChaine$=MainChaine$+"phone"+Chr(13)
MainChaine$=MainChaine$+"company"+Chr(13)
MainChaine$=MainChaine$+"company_type"+Chr(13)
MainChaine$=MainChaine$+"activity"+Chr(13)
MainChaine$=MainChaine$+"employees"+Chr(13)
MainChaine$=MainChaine$+"adress1"+Chr(13)
MainChaine$=MainChaine$+"adress2"+Chr(13)
MainChaine$=MainChaine$+"adress3"+Chr(13)
MainChaine$=MainChaine$+"city"+Chr(13)
MainChaine$=MainChaine$+"zip"+Chr(13)
MainChaine$=MainChaine$+"product"
SetGadgetText(#TextePrincipal,MainChaine$)
;}
Case #MENU_Helpme
;{
SetGadgetText(#TexteEnTete,RPS("entetehelpme", "AIDE A L'UTILISATION"))
SetGadgetText(#TexteSaisie,RPS("saisiehelpme", "Voir aussi la liste des champs"))
MainChaine$=RPS("help00","Le programme TNA.exe permet d'évaluer les réponses données à des tests")
MainChaine$=MainChaine$+", "+RPS("help01","tests passés sur le web, et stockées sur un serveur FTP.")
MainChaine$=MainChaine$+Chr(13)
MainChaine$=MainChaine$+Chr(13)+RPS("help10","MODE D'EMPLOI")
MainChaine$=MainChaine$+Chr(13)+RPS("help11","1.- Fichier -> Descendre les fichiers TNA")
MainChaine$=MainChaine$+RPS("help12"," Spécifier depuis quelle date, pour ne pas tout télécharger.")
MainChaine$=MainChaine$+Chr(13)+RPS("help13","2.- Fichier -> Traiter les TNA descendus")
MainChaine$=MainChaine$+RPS("help14"," Spécifier depuis quelle date, pour ne pas tout traiter à nouveau.")
MainChaine$=MainChaine$+Chr(13)+RPS("help15","3.- Fichier -> Enregistrer sous...")
MainChaine$=MainChaine$+RPS("help16"," L'affichage présent des derniers fichiers traités sera sauvegardé sous un fichier texte.")
MainChaine$=MainChaine$+Chr(13)
MainChaine$=MainChaine$+Chr(13)+RPS("help20","PRE-REQUIS")
MainChaine$=MainChaine$+Chr(13)+RPS("help21","- Le fichier ftp_settings accompagnant le programme TNA.exe contient les identifiants")
MainChaine$=MainChaine$+" "+RPS("help22","du serveur FTP : serveur, utilisateur, et mot de passe.")
MainChaine$=MainChaine$+Chr(13)+RPS("help23","- Pour assurer la sécurité su serveur FTP, le mot de passe est crypté.")
MainChaine$=MainChaine$+Chr(13)+RPS("help24","- Pour modifier les paramètres FTP, il faut passer par l'application, Menu 'FTP -> Modifier les paramètres'.")
MainChaine$=MainChaine$+Chr(13)+RPS("help240","- On peut tester les paramètres et la bonne santé du serveur par le menu 'FTP -> Tester la Connexion'.")
MainChaine$=MainChaine$+Chr(13)+RPS("help25","- Les fichiers TNA à évaluer sont dans le répertoire ./tna du serveur FTP.")
MainChaine$=MainChaine$+Chr(13)+RPS("help26","- Le répertoire depuis lequel TNA.exe est lancé doit contenir un sous-répertoire : treated")
MainChaine$=MainChaine$+" "+RPS("help27","ainsi que les fichiers de solution des tests.")
MainChaine$=MainChaine$+Chr(13)+RPS("help28","- Les fichiers TNA générés par l'outil Web et les fichiers de solution portent un nom particulier :")
MainChaine$=MainChaine$+Chr(13)+RPS("help29"," - Pour les fichiers de test à évaluer: prefixe + date + .txt")
MainChaine$=MainChaine$+", "+RPS("help30","avec prefixe quelconque, date au format JJMM, et extention .txt obligatoire")
MainChaine$=MainChaine$+Chr(13)+RPS("help31"," - Pour les fichiers de solution : prefixe + soluce + .txt")
MainChaine$=MainChaine$+", "+RPS("help32","avec le même préfixe que le fichier à tester, le mot soluce en toutes lettres, et extention .txt obligatoire")
MainChaine$=MainChaine$+Chr(13)
MainChaine$=MainChaine$+Chr(13)+RPS("help33","Une telle nomenclature permet d'avoir plusieurs tests différents, puisque chacun a sa solution.")
MainChaine$=MainChaine$+" "+RPS("help34","Il est donc indispensable que le générateur de ces fichiers par le web utilise cette nomenclature en sortie comme Nom de fichier.")
MainChaine$=MainChaine$+Chr(13)+RPS("help35","- L'outil web ayant généré les fichiers de sortie doit utiliser le séparateur de champ | (pipe).")
MainChaine$=MainChaine$+Chr(13)+RPS("help36","- Les réponses attendues sont sous forme d'un chiffre ou d'une lettre après le nom du champ.")
MainChaine$=MainChaine$+Chr(13)+RPS("help37"," - exemple : Q1|A|Q2|5 ... ou bien Q01|A|Q02|B ... La lettre Q est en majuscule !")
MainChaine$=MainChaine$+Chr(13)+RPS("help38","- De 1 à 99 questions sont possible, mais chaque réponse ne repose que sur 1 caractère.")
MainChaine$=MainChaine$+Chr(13)+RPS("help39","- La liste des autres champs traités est disponible sous le menu 'Aide -> Liste des Champs'.")
MainChaine$=MainChaine$+Chr(13)
MainChaine$=MainChaine$+Chr(13)+RPS("help40","GENERER LA SOLUTION")
MainChaine$=MainChaine$+Chr(13)+RPS("help41","- Si les fichiers de solution n'existent pas localement, on peut les générer à partir d'un TNA.")
MainChaine$=MainChaine$+" "+RPS("help42","Pour cela, il suffit de passer le TNA, en donnant toutes les bonnes réponses, en renseignant le champ 'nom' avec le mot 'solution', et en indiquant son prénom.")
MainChaine$=MainChaine$+Chr(13)+RPS("help43","- Le traitement suivant des fichiers TNA proposera de créer un fichier solution à partir de ces réponses.")
MainChaine$=MainChaine$+" "+RPS("help44","Et tout traitement à venir utilisera ces nouvelles réponses.")
MainChaine$=MainChaine$+Chr(13)
MainChaine$=MainChaine$+Chr(13)+RPS("help50","MAINTENANCE ET NETTOYAGE")
MainChaine$=MainChaine$+Chr(13)+RPS("help51","- Le Menu 'FTP -> Supprimer les fichiers du serveur FTP' permet de faire le ménage sur le serveur.")
MainChaine$=MainChaine$+" "+RPS("help52","Si cela n'est pas fait de temps en temps, les fichiers TNA vont s'accumuler, et seront ré-évalués à chaque fois.")
MainChaine$=MainChaine$+Chr(13)+RPS("help53","Attention ! Tous les fichiers du répertoire ./tna du serveur FTP seront supprimés !")
MainChaine$=MainChaine$+" "+RPS("help54","Si on souhaite faire machine arrière, on peut toujours remonter les fichiers que l'on avait déjà descendus par le menu :")
MainChaine$=MainChaine$+" "+RPS("help55","'FTP -> Remonter les fichiers ...' qui n'est accessible qu'après effacement.")
MainChaine$=MainChaine$+" "+RPS("help56","Dans ce cas, tous les fichiers locaux du répertoire ./treated sont envoyés vers le répertoire ./tna du serveur FTP.")
MainChaine$=MainChaine$+Chr(13)+RPS("help57","- Le Menu 'Fichier -> Supprimer les fichiers locaux' permet d'effacer tous les TNA présents dans le répertoire ./treated local.")
MainChaine$=MainChaine$+Chr(13)+RPS("help58","Attention ! Si d'autres fichiers que les TNA sont dans ce répertoires, ils seront aussi supprimés !")
SetGadgetText(#TextePrincipal,MainChaine$)
;}
Case #MENU_HAbout
;{
SetGadgetText(#TexteEnTete,RPS("enteteapropos", "A PROPOS DE TNA ..."))
SetGadgetText(#TexteSaisie,RPS("by", "par")+" ")
MainChaine$="TNA"+Chr(13)+"v 1.1"+Chr(13)+ "26 05 2009"
SetGadgetText(#TextePrincipal,MainChaine$)
;}
Case #MENU_Quit ;Choix du menu Quitter
;{
SetGadgetText(#TextePrincipal,"")
End
;}
Default ;Effacer le texte principal
;{
EndSelect
;}
EndIf
;}
Until EventID = #PB_Event_CloseWindow
;}
; IDE Options = PureBasic 4.30 (Windows - x86)
; CursorPosition = 494
; FirstLine = 142