Page 2 sur 2
Re: [..] Supprimer un mot déjà connu d'un fichier texte
Posté : mer. 10 oct. 2012 23:08
par Wardow
J'ai pas compris pourquoi faire si compliqué,
si l'utilisateur veux ajouter "jean-marc" alors qu'il y a déjà "jean marc" dans la liste ça ne serais pas plus simple de l'empecher et donc de le forcer à proposer un autre nom ?
Et aussi, si l’utilisateur ajoute un nombre genre 25 et que le nombre 255 est déjà présent, comment le logiciel va t il se comporter au moment de la suppression de l'un des deux ??
Et si au lieu d'un fichier texte j'utilisais un fichier .ini ça serais aussi plus facile ?
Re: [..] Supprimer un mot déjà connu d'un fichier texte
Posté : mer. 10 oct. 2012 23:12
par Tlem
@mikell
Voir ma réponse dans mon message précédent. ^^
Re: [..] Supprimer un mot déjà connu d'un fichier texte
Posté : mer. 10 oct. 2012 23:13
par mikell
Wardow a écrit :Et si au lieu d'un fichier texte j'utilisais un fichier .ini ça serais aussi plus facile ?

Re: [..] Supprimer un mot déjà connu d'un fichier texte
Posté : mer. 10 oct. 2012 23:13
par Tlem
+1
Re: [..] Supprimer un mot déjà connu d'un fichier texte
Posté : mer. 10 oct. 2012 23:15
par mikell
Re: [..] Supprimer un mot déjà connu d'un fichier texte
Posté : mer. 10 oct. 2012 23:19
par Wardow
La c'est vraiment devenu impossible à comprendre (pour moi en tout cas

)
Re: [..] Supprimer un mot déjà connu d'un fichier texte
Posté : jeu. 11 oct. 2012 14:45
par TommyDDR
Ne jamais lancer Mikell sur un sujet regexp...
Je propose d'ajouter à son compte (forum) un filtre qui n'afficherait pas les sujet contenant le mot "RegExp".
Re: [..] Supprimer un mot déjà connu d'un fichier texte
Posté : jeu. 11 oct. 2012 15:00
par mikell
ARGH...
motion refusée

Re: [..] Supprimer un mot déjà connu d'un fichier texte
Posté : jeu. 11 oct. 2012 22:30
par Tlem
Bonsoir la compagnie.
J'ai été plus ou moins inspiré entre hier soir et ce soir.
Donc je me suis dit pourquoi pas faire cette fameuse 'IA Light' et voici ce que cela donne pour la demande de Wardow :
► Afficher le texte
Code : Tout sélectionner
#include <File.au3>
; 'ãlbértô RødRîgó ' => Chaine écrite dans le fichier
; 'Alberto Rõdrigo' => Chaine à supprimer
Local $File = "Fichier.txt" ; Nom du fichier à traiter
Local $NameToDelete = 'Alberto Rõdrigo' ; Nom à supprimer du fichier
Local $aFile
_FileReadToArray($File, $aFile) ; Mise en tableau du fichier source
; Si erreur, boite de message puis bye bye.
If @error Then
MsgBox(16, "Erreur", "Erreur de lecture du fichier de données")
Exit
EndIf
; Boucle de lecture du tableau pour comparaison
Local $StrTmp
For $i = 1 To UBound($aFile) - 1
; Si les deux chaines sont différentes, alors on ajoute l'élément dans une variable, suivit d'un CRLF
If _NameStringSimplify($NameToDelete) <> _NameStringSimplify($aFile[$i]) Then
$StrTmp &= $aFile[$i] & @CRLF
EndIf
Next
; On réouvre le fichier source, mais pour effacement puis écriture
Local $hFile = FileOpen($File, 2)
; Si erreur, boite de message puis bye bye.
If $hFile = -1 Then
MsgBox(16, "Erreur", "Erreur d'écriture du fichier de données")
Exit
EndIf
FileWrite($hFile, $StrTmp) ; on écrit le résulta de la comparaison
FileClose($hFile) ; On ferme le fichier puis bye bye ...
Exit
Func _NameStringSimplify($sInput)
If $sInput = "" Then Return $sInput
Local $szInput = $sInput
$szInput = StringLower($szInput) ; Convertit en minuscule
$szInput = StringRegExpReplace($szInput, '([\x00-\x40])', "") ; Supprime les caractères ASCII 00 à 40
$szInput = StringRegExpReplace($szInput, '([\x5B-\x60])', "") ; Supprime les caractères ASCII 5B à 60
$szInput = StringRegExpReplace($szInput, '([\x7B-\xB0])', "") ; Supprime les caractères ASCII 7B à BF
$szInput = StringRegExpReplace($szInput, '([\xD7\xF7])', "") ; Supprime les caractères ASCII D7 et F7 (× et ÷)
$szInput = StringRegExpReplace($szInput, '([\xE6])', "ae") ; Remplace æ par ae
; Convertit les caractères ASCII spéciaux DF à FF (les caractères E0 à DE étant passé en minuscule)
Local $aInputChar = StringSplit("àáâãäåçèéêëìíîïðñòóôõöøùúûüýþÿß", "")
Local $aOutputChar = StringSplit("aaaaaaceeeeiiiidnoooooouuuuybyb", "")
For $i = 1 To UBound($aInputChar) - 1
$szInput = StringReplace($szInput, $aInputChar[$i], $aOutputChar[$i])
Next
Return $szInput
EndFunc
L'avantage de la fonction
_NameStringSimplify() c'est qu'elle va permettre de comparer deux noms en faisant abstraction des majuscules/minuscules, d'erreur de frappe simple (espaces) ou caractères spéciaux ou encore des caractères accentués. ^^
Ce qui fait que lors d'une comparaison de chaine, nous auront :
- Jérémie = Jeremie
JeAn -Marc = Jean-Marc
Ångström = Angstrom
Mi kell = Mikell
Etc ...
Alors, certes il pourrait y avoir des cas ou la comparaison devrait être fausse, mais par rapport à tout autre solution, celle-ci me semble plus proche du 100%.

Re: [..] Supprimer un mot déjà connu d'un fichier texte
Posté : jeu. 11 oct. 2012 23:06
par mikell
Intéressant, la fonction est sympa et je la mets de côté pour étude
Mais à utiliser dans des circonstances bien définies, une faute d'orthographe restant malgré tout une faute d'orthographe
Par exemple, faut surtout pas confondre Michele (prononcer "mikélé") mon cousin italien , et Michèle ma cousine belge

Re: [..] Supprimer un mot déjà connu d'un fichier texte
Posté : jeu. 11 oct. 2012 23:08
par Tlem
J'ai bien dit proche du 100% ...
Il est clair qu'une vraie faute d’orthographe ne pourra être interprétée sans une véritable IA (et encore) ...
Re: [..] Supprimer un mot déjà connu d'un fichier texte
Posté : mer. 30 déc. 2015 23:04
par Wardow
Merci, j'ai eu ma réponse, je met donc en [R]
Code : Tout sélectionner
$newtext = StringReplace(FileRead(@ScriptDir & "\Multicraft\Sauvegardes.txt"), $name & @crlf, "")
$file1 = FileOpen(@ScriptDir & "\Multicraft\Sauvegardes.txt", 2)
FileWrite($file1, $newtext)
FileClose($file1)
Re: [R] Supprimer un mot déjà connu d'un fichier texte
Posté : jeu. 31 déc. 2015 04:28
par jchd
Je me souviens très bien avoir pondu dans la souffrance un "machin" du genre pour rapprocher les noms, prénoms, emails et adresses de clients provenant de plusieurs plate-formes de vente. Très souvent les gens s'inscrivent avec de légères variations ou typos, parfois c'est la mère ou le fils qui changent un prénom et/ou une adresse mail, des gens qui se marient ou divorcent, qui déménagent, etc.
Pour éviter de doublonner ad nauseam notre base de clients (on vendait du matériel d'équitation), j'avais une moulinette tordue qui soit "matchait" toute seule (juste une faute de frappe jugée mineure) ou proposait des clients existants s'il y avait assez de points communs pour qu'il soit assez probable que ce soit en fait le même foyer qui voulait recommander.
Tables SQL de prénoms, de noms, de codes postaux et communes de plus de 30 pays, désaccentuation Unicode universelle, recherche floue, pondération de probabilités, etc. En pratique, quand on a affaire à de la saisie faite par le grand public qui n'accorde que peu d'importance à la correction des coordonnées qu'il utilise pour acheter un truc dont il a envie "tout de suite", c'est plutôt sportif quand la masse augmente et qu'on veut éviter le "garbage out" malgré le "garbage in".
La validation de saisie a toujours été difficile. Rien que valider un couple code postal - commune française est tout sauf simple.