Je travail actuellement sur un projet de traduction, correction, etc. de fichier
Alors voila, j'ai deux fichier, un Anglais et un Français.
Alors pour me faciliter la tâche, je fais se programme qui va me mâcher le travail car comparer les deux fichier à la main et rajouter
se qui manque dans le fichier Français va prendre trop de temps surtout que ya beaucoup de fichier à faire !
Le but est de comparer le fichier Français avec celui Anglais
Tous se qui manquera dans le fichier Français serra ajouté depuis le fichier Anglais.
Pour corser le tous, le fichier Français devra être identique au fichier Anglais
dans tous les domaine sauf la traduction qui change, exactement la même
organisation, tous devra être parfaitement identique sauf la traduction bien sur.
Donc voilà comment je procède actuellement:
Je charge le fichier Anglais dans une liste
Je charge le fichier Français dans une liste
Je parcourt un par un depuis le début la liste Anglaise
Je parcourt en même temps un par un la liste Française
Ex:
Code : Tout sélectionner
ForEach ListeFichierAnglais.s()
ForEach ListeFichierFrancais.s()
Next
Next
La clef dans la liste Française est-elle présente:
Si oui -> est-elle à la bonne position, Si oui, je passe à l’élément suivant, Si non, je déplace l'élément de la liste Française et je le remet à la même position qu'il est dans la liste Anglaise
Si non -> Je copie l'élément de la liste Anglaise et je le met à la même position dans la liste Française (Évidement la traduction sera en anglais mais ont s'en fiche, suffira de traduire plus tard)
Comme si c'était simple, il faut aussi voir si ya des doublons (Toujours dans la liste Française car la liste Anglaise est toujours pas définition ni quel elle)
et si yen a, il faut les déplacer tout à la fin de la liste Française en mettant une séparation pour savoir ou il sont.
Bref un beau casse tête et j'ai un peu de mal donc si je pouvais avoir de l'aide se serait bien
J'ai déjà tous codé mais ça marche pas encore très très bien.
Le programme créer un fichier Français du résultat avec dans le nom de celui-ci "Traité"
Pas touche au originaux !
Je met le code ici mais je met aussi l'archive qui contient le code et les fichier de test
Si vous avez des questions ou autres chose hésitez pas

Code : Tout sélectionner
; Lecture et mise dans une liste le fichier de langue anglais.
FichierAnglais$ = OpenFileRequester("Sélectionnez le fichier ANGLAIS...", "", "Fichier Langue (.lang)|*.lang|All files (*.*)|*.*", 0)
If ReadFile(1, FichierAnglais$) ; Si le fichier peut être lu , on continue...
NewList ListeFichierAnglais.s()
While Eof(1) = 0 ; Boucle tant que la fin du fichier n'est pas atteinte. (Eof = 'End Of File')
AddElement(ListeFichierAnglais.s())
ListeFichierAnglais.s() = ReadString(1)
Wend
CloseFile(1)
Else ; Sinon ont affiche un message d'avertissement
MessageRequester("Information","Impossible d'ouvrir le fichier !")
EndIf
; Lecture et mise dans une liste le fichier de langue français.
FichierFrancais$ = OpenFileRequester("Sélectionnez le fichier FRANCAIS...", "", "Fichier Langue (.lang)|*.lang|All files (*.*)|*.*", 0)
If ReadFile(1, FichierFrancais$) ; Si le fichier peut être lu , on continue...
NewList ListeFichierFrancais.s()
While Eof(1) = 0 ; Boucle tant que la fin du fichier n'est pas atteinte. (Eof = 'End Of File')
Ligne$ = ReadString(1)
; Ont ne prends pas les ligne vite, ont les ajoutera depuis la liste Anglaise, c'est pour évité les ligne vide superflue
If Ligne$ > ""
AddElement(ListeFichierFrancais.s())
ListeFichierFrancais.s() = Ligne$
EndIf
Wend
CloseFile(1)
Else ; Sinon ont affiche un message d'avertissement
MessageRequester("Information","Impossible d'ouvrir le fichier !")
EndIf
IndexListeFichierAnglais = 0
; Parcourt la liste ListeFichierAnglais.s()
ForEach ListeFichierAnglais.s()
IndexListeFichierAnglais + 1
; Recherche le "="
PositionEgale = FindString(ListeFichierAnglais.s(), "=", 1)
; Si le "=" à bien été trouvé
If PositionEgale > 0
; Extraction de la clef.
ClefListeFichierAnglais$ = Mid(ListeFichierAnglais.s(), 1, PositionEgale)
; Ont prend l'élément pour un éventuel usage plus tard
ElementListeAnglais$ = ListeFichierAnglais.s()
Debug "Clef Anglaise actuel: " + ClefListeFichierAnglais$
Debug "Position actuel de la clef Anglaise = " + ListIndex(ListeFichierAnglais.s())
Debug ""
; Recherche de la clef semblable Anglaise dans la liste de langue français pour voir s'il elle éxiste bien
Trouver = 0
IndexListeFichierFrancais = 0
; Parcourt la liste ListeFichierFrancais.s()
ForEach ListeFichierFrancais.s()
; La clef n'a pas encore été trouvé
If Trouver = 0
IndexListeFichierFrancais + 1
; Si la clef Anglaise à bien été trouvé dans la liste Française
If FindString(ListeFichierFrancais.s(), ClefListeFichierAnglais$, 1)
; Ont prend l'élément pour un éventuel usage plus tard
ElementListeFrancais$ = ListeFichierFrancais.s()
Trouver = 1
IndexListeFichierFrancais - 1 ; Il faut enlever 1 car au début ont à commencé à 1 alors que c'était 0 !
Continue
EndIf
ElseIf Trouver = 1 ; La clef à déjà été trouver
; Recherche des doublons...
; Si la clef Anglaise à encore été trouvé dans la liste Française
If FindString(ListeFichierFrancais.s(), ClefListeFichierAnglais$, 1)
Doublon + 1
; Ont met le doublon à la fin de la liste Française...
; Ont prend l'élément actuel de la liste Française
ElementListeFrancaisTemps$ = ListeFichierFrancais.s()
; Ont sauvegarde la position actuel du pointeur dans la liste pour le restaurer plus tard
SauvegardePositionPointeurListeFrancais = ListIndex(ListeFichierFrancais.s())
; Ont supprime cet élément
DeleteElement(ListeFichierFrancais.s(), 1)
; Ont met l'élément à la fin de la liste de la liste Française
LastElement(ListeFichierFrancais.s())
AddElement(ListeFichierFrancais.s())
ListeFichierFrancais.s() = ElementListeFrancaisTemps$
; Ont restaure l'élément courent de la liste Française
SelectElement(ListeFichierFrancais.s(), SauvegardePositionPointeurListeFrancais)
EndIf
EndIf
Next
; Ont vérifie que la clef à été trouvé
If Trouver = 1
Debug "Clef Française Trouvé !"
Debug ""
; Ont va maintenant vérifier que les deux élément des deux liste sont à la même position
; Si l'élément dans la liste de la langue Française n'est pas à la même position que la liste de la langue Anglaise
; alors ont change de place l'élément la liste de la langue Française et ont le remet à la même position que la liste de la langue Anglaise
; Les deux élément sont t'il à la même position ?
If IndexListeFichierAnglais - 1 = IndexListeFichierFrancais ; Il faut enlever 1 car au début ont à commencé à 1 alors que c'était 0 !
; Oui, c'est bon !
Debug "Clef Française a la bonne place"
Debug ""
Normale + 1
Else ; L'élément de la liste de la langue Française n'est pas à la même position que la liste de la langue Anglaise
Debug "Clef Française à la mauvaise place !"
Debug "La clef Anglaise est à la position " + Str(IndexListeFichierAnglais - 1) + ", Alors que la clef Française est à la position " + Str(IndexListeFichierFrancais) + " !"
Debug ""
; Ont change l'élément actuel de position de la liste de la langue Française
; et ont le met à la même position que la liste de la langue Anglaise
; Supprime l'élément actuel de la liste de la langue Française
DeleteElement(ListeFichierFrancais(), 1)
; Change le pointeur de place dans la liste ListeFichierFrancais.s() et le met à la même position que la liste ListeFichierAnglais.s()
SelectElement(ListeFichierFrancais.s(), IndexListeFichierAnglais - 1) ; Il faut enlever 1 car au début ont à commencé à 1 alors que c'était 0 !
; Ajoute l'élément dans la liste de la langue Française à la même position que la liste de la langue Anglaise
AddElement(ListeFichierFrancais.s())
ListeFichierFrancais.s() = ElementListeFrancais$
Debug "La clef français a été changer de place -> " + Str(IndexListeFichierAnglais - 1)
Debug ""
Changer + 1
EndIf
Else ; La clef n'a pas été trouvé, il faut donc l'ajouter dans la liste de langue Française !
Debug "Clef Anglaise " + Chr(34) + ElementListeAnglais$ + Chr(34) + " non trouvé dans la liste Française !"
Debug "Clef Anglaise ajouté dans la liste Française a la position " + Str(IndexListeFichierAnglais - 1)
Debug ""
Entree + 1
; Ont rajoute la ligne entière ou se trouve la clef Anglaise dans la liste de la langue Française à la même position
; Change le pointeur de place dans la liste ListeFichierFrancais.s() et le met à la même position que la liste ListeFichierAnglais.s()
SelectElement(ListeFichierFrancais.s(), IndexListeFichierAnglais - 1) ; Il faut enlever 1 car au début ont à commencé à 1 alors que c'était 0 !
; Ajoute la ligne entière ou se trouve la clef Anglaise dans la liste de la langue Française
AddElement(ListeFichierFrancais.s())
ListeFichierFrancais.s() = ElementListeAnglais$
EndIf
Else ; La ligne ne contient pas de "="
Debug "La ligne actuel n'est pas une clef"
Debug ""
; Extraction de la ligne dans la liste de la langue anglais.
LigneListeFichierAnglais$ = Mid(ListeFichierAnglais.s(), 1)
Debug "La Ligne actuel est: " + LigneListeFichierAnglais$
Debug ""
; Recherche de la ligne semblable Anglaise dans la liste de langue français pour voir s'il elle éxiste bien
Trouver = 0
IndexListeFichierFrancais = 0
; Parcourt la liste ListeFichierFrancais.s()
ForEach ListeFichierFrancais.s()
IndexListeFichierFrancais + 1
; Si la ligne Anglaise à bien été trouvé dans la liste Française
If FindString(ListeFichierFrancais.s(), LigneListeFichierAnglais$, 1)
; Ont prend l'élément pour un éventuel usage plus tard
ElementListeFrancais$ = ListeFichierFrancais.s()
Trouver = 1
IndexListeFichierFrancais - 1 ; Il faut enlever 1 car au début ont à commencé à 1 alors que c'était 0 !
Break ; Ont quitte la boucle car ont a trouvé la clef
EndIf
Next
; Ont vérifie que la ligne à été trouvé
If Trouver = 1
Debug "La ligne Anglaise " + Chr(34) + LigneListeFichierAnglais$ + Chr(34) + " a été trouvé dans la liste Française à la position " + Str(IndexListeFichierFrancais)
Debug ""
; Ont va maintenant vérifier que les deux élément des deux liste sont à la même position
; Si l'élément dans la liste de la langue Française n'est pas à la même position que la liste de la langue Anglaise
; alors ont change de place l'élément la liste de la langue Française et ont le remet à la même position que la liste de la langue Anglaise
; Les deux élément sont t'il à la même position ?
If IndexListeFichierAnglais - 1 = IndexListeFichierFrancais ; Il faut enlever 1 car au début ont à commencé à 1 alors que c'était 0 !
; Oui, c'est bon !
Debug "La ligne Anglaise est à la bonne place dans la liste Française"
Debug ""
Normale + 1
Else ; L'élément de la liste de la langue Française n'est pas à la même position que la liste de la langue Anglaise
Debug "La ligne Anglaise est à la mauvaise place dans la liste Française"
Debug "Celle-ci est à la position " + Str(IndexListeFichierFrancais) + ", Alors qu'elle devrais plutôt être à la position " + Str(IndexListeFichierAnglais - 1)
Debug ""
; Ont change l'élément actuel de position de la liste de la langue Française
; et ont le met à la même position que la liste de la langue Anglaise
; Supprime l'élément actuel de la liste de la langue Française
DeleteElement(ListeFichierFrancais(), 1)
; Change le pointeur de place dans la liste ListeFichierFrancais.s() et le met à la même position que la liste ListeFichierAnglais.s()
SelectElement(ListeFichierFrancais.s(), IndexListeFichierAnglais - 1) ; Il faut enlever 1 car au début ont à commencé à 1 alors que c'était 0 !
; Ajoute l'élément dans la liste de la langue Française à la même position que la liste de la langue Anglaise
AddElement(ListeFichierFrancais.s())
ListeFichierFrancais.s() = LigneListeFichierAnglais$
Debug "La ligne Française à été changé de place et mis à la position " + Str(IndexListeFichierAnglais - 1)
Debug ""
Changer + 1
EndIf
Else ; La ligne n'a pas été trouvé, il faut donc l'ajouter dans la liste de langue Française !
Debug "La ligne Anglaise n'a pas été trouvé dans la liste Française"
Debug "La ligne Anglaise " + Chr(34) + LigneListeFichierAnglais$ + Chr(34) + " a été ajouté dans la liste Française à la position " + Str(IndexListeFichierAnglais - 1)
Debug ""
Entree + 1
; Ont rajoute la ligne entière ou se trouve la clef Anglaise dans la liste de la langue Française à la même position
; Change le pointeur de place dans la liste ListeFichierFrancais.s() et le met à la même position que la liste ListeFichierAnglais.s()
SelectElement(ListeFichierFrancais.s(), IndexListeFichierAnglais - 1) ; Il faut enlever 1 car au début ont à commencé à 1 alors que c'était 0 !
; Ajoute la ligne entière ou se trouve la clef Anglaise dans la liste de la langue Française
AddElement(ListeFichierFrancais.s())
ListeFichierFrancais.s() = LigneListeFichierAnglais$
EndIf
EndIf
Next
Debug "------------------------------------------------------------------------------------------"
Debug Str(Normale) + " Entrée Française était correcte."
Debug Str(Changer) + " Entrée Française était présente mais à la mauvaise position et ont été changé de place."
Debug Str(Entree) + " Entrée Française était manquante et ont été ajouté."
Debug Str(Doublon) + " Entrée doublon Française ont été trouvé et déplacé en fin de liste."
Debug "------------------------------------------------------------------------------------------"
Debug ""
; Debug "Vérification des deux liste..."
;
; ; Ont vérifie maintenant les deux liste pour voir s'il est sont concordante
; ; Parcourt tous les élément de la liste Anglaise
; ForEach ListeFichierAnglais.s()
;
; ; Met le pointeur de la liste Française à la même position que la liste Anglaise
; SelectElement(ListeFichierFrancais.s(), ListIndex(ListeFichierAnglais.s())
;
; ; Récupère les élément de chacune des deux liste
; ElementListeAnglais$ = ListeFichierAnglais.s()
; ElementListeFrancais$ = ListeFichierFrancais.s()
;
; Debug "Element Anglais = " + ElementListeAnglais$
; Debug "Element Français = " + ElementListeFrancais$
;
; ; Les deux élément sont-il identique ?
; If ElementListeAnglais$ = ElementListeFrancais$
; Debug "Identique"
; Debug ""
;
; Continue
;
; Else
; Debug "Différent !"
; Debug "Recherche de l'élément plus loin dans la liste..."
;
; ; Les deux élément sont différent, l'élément Français n'est pas à la bonne place, il manque peut être un élément
; ; Recherche plus loin dans la liste Fraçaise pour voir si cet élément y est
;
; EndIf
;
;
;
; Next
;
;
;
;
; Place le pointeur à la fin de la liste Anglaise
LastElement(ListeFichierAnglais.s())
; Place le pointeur de la liste Français à la même position que dans la liste Anglaise
SelectElement(ListeFichierFrancais.s(), ListSize(ListeFichierAnglais.s()) - 1) ; - 1 car la numérotaion des éléments de la liste commence à 0 et 0 est aussi un élément
; Ajoute une ligne en pointiller pour voir la séparation des doublons
AddElement(ListeFichierFrancais.s())
ListeFichierFrancais.s() = "-----------------------------------------------------------------------------------------------------------------------------------------------"
; ; Tous se qui se trouve en plus de la position de la liste Anglaise est Superflux !
;
; For Index = ListSize(ListeFichierAnglais.s()) - 1 To ListSize(ListeFichierFrancais.s()) - 1
; SelectElement(ListeFichierFrancais.s(), Index)
; Debug "Superflux -> " + ListeFichierFrancais.s()
; Next
;
; Debug "------------------------------------------------------------------------------------------"
;
; ; Construction du fichier de verification de la langue Anglais
; CreateFile(1, GetFilePart(FichierAnglais$, #PB_FileSystem_NoExtension) + " Vérifier.lang")
;
; ; Parcout tous les élément de la liste Anglaise et les enregistrent dans le nouveau fichier Anglais
; ForEach ListeFichierAnglais.s()
; WriteStringN(1, ListeFichierAnglais.s())
; Next
;
; CloseFile(1)
;
; ; Construction du fichier de la langue Française
; CreateFile(1, GetFilePart(FichierFrancais$, #PB_FileSystem_NoExtension) + " Vérifier.lang")
;
; ; Parcout tous les élément de la liste Française et les enregistrent dans le nouveau fichier Français
; ForEach ListeFichierFrancais.s()
; WriteStringN(1, ListeFichierFrancais.s())
; Next
;
; CloseFile(1)
; Construction du fichier de la langue français
CreateFile(1, GetFilePart(FichierFrancais$, #PB_FileSystem_NoExtension) + " Traité.lang")
; Parcout tous les élément de la liste Française et les enregistrent dans le nouveau fichier français
ForEach ListeFichierFrancais.s()
WriteStringN(1, ListeFichierFrancais.s())
Next
Debug "Création du fichier terminé."
CloseFile(1)