Page 1 sur 1

[R] Lister les lignes d’un fichier par ordre alphabétique avec suppression des doublants

Posté : mar. 01 mai 2018 18:38
par Boulanza
Bonjour,
Ci-dessous 2 scripts le premier est pour supprimer lignes doublons. Le deuxième script pour lister les lignes par ordre alphabétique. Je cherche la solution pour écrire le résultat (_ArraySort) sur un fichier texte : FileWrite("c:\test3.txt","?")
Merci pour votre aide.
Cordialement.
$filename1 = "c:\test1.txt"
$filename2 = "c:\test2.txt"
$use = ""
$line = "1"
$file = FileOpen($filename1, 0)

While 1
    $line = FileReadLine($file)
    If @error = -1 Then ExitLoop
        $Present = StringInStr($use,$line)
            if $present = "0" then
                $use = $use & $line & '|'
                FileWrite($filename2, $line &@CRLF)

         EndIf
WEnd
;======================================================
;Lister par ordre alphabétique.
#Include <File.au3>
#include <Array.au3>
Sleep(6000)
$filename2 = "c:\test2.txt"
$Tri = _FileLineTri($filename2)
_ArrayDisplay($Tri)

Func _FileLineTri($File,$iDescending = 0)
$Nbrlines = _FileCountLines($File)
Local $Tableau[$Nbrlines]
$Var = -1

For $i = 1 To $Nbrlines
    $Tableau[$Var+1] = FileReadLine($File,$i)
    $Var += 1
Next

_ArraySort($Tableau,$iDescending)
Return $Tableau
EndFunc

Re: [..] Lister les lignes d’un fichier par ordre alphabétique avec suppression des doublants

Posté : mar. 01 mai 2018 22:00
par Boulanza
Plus simple mais le résultat des lignes sont classés par ordre décroissant de: Z à A, Je souhaite que la résultat final soit par ordre croissant de A à Z. Votre aide merci.
;Supprimer doublants
#Include <File.au3>
#include <array.au3>
Global $aArray
$filename1 = "c:\test1.txt"
$filename2 = "c:\test2.txt"
$filename3 = "c:\test3.txt"
$use = ""
$line = "1"
$file = FileOpen($filename1, 0)

While 1
    $line = FileReadLine($file)
    If @error = -1 Then ExitLoop
        $Present = StringInStr($use,$line)
            if $present = "0" then
                $use = $use & $line & '|'
                FileWrite($filename2, $line &@CRLF)

         EndIf
WEnd
Sleep(2000)
;Lister par ordre alphabétique.
_FileReadToArray($filename2, $aArray)
_ArraySort($aArray, 1, 1)
_FileWriteFromArray($filename3, $aArray, 1)

Re: [..] Lister les lignes d’un fichier par ordre alphabétique avec suppression des doublants

Posté : mar. 01 mai 2018 22:27
par Boulanza
Bonsoir,
Ceci est une solution qui marche bien, mais il faut l’optimiser au mieux.
Cordialement.
#include <Array.au3>
#include <File.au3>

;Supprimer doublants
$filename1 = "c:\test1.txt"
$filename2 = "c:\test2.txt"
$Sortie = "c:\test3.txt"
Dim $aSort
$use = ""
$line = "1"
$file = FileOpen($filename1, 0)

While 1
    $line = FileReadLine($file)
    If @error = -1 Then ExitLoop
        $Present = StringInStr($use,$line)
            if $present = "0" then
                $use = $use & $line & '|'
                FileWrite($filename2, $line &@CRLF)

         EndIf
WEnd
Sleep(2000)

;Lister par ordre alphabétique.
If Not _FileReadToArray($filename2,$aSort) Then
   MsgBox(4096,"Error", " Error reading txt to Array     error:" & @error)
   Exit
EndIf

; on retire le premier élèment (celui qui retourne le nbre de valeur dans le array position 0)
_ArrayDelete($aSort,0)
_ArraySort($aSort) ; Rangement croissant (valeur 1 décroissant)
;_ArrayDisplay($aSort) ; affiche le array (pas obligatoire)

; boucle sur le array & ecriture du fichier de sortie
For $x = 0 to UBound($aSort) - 1
    FileWriteLine($Sortie,$aSort[$x])
Next

Re: [..] Ecrire le résultat (_ArraySort) sur un fichier texte

Posté : mar. 01 mai 2018 22:58
par Tlem
Bonsoir. Ça manque encore de recherches ...
Pourtant vous aviez tous les éléments, mais pas assez de lecture de la documentation. ^^

Code : Tout sélectionner

#include <Array.au3>
#include <File.au3>

$file = "D:\test1.txt"
$Sortie = "D:\Test_Out.txt"
Dim $aArray

If Not _FileReadToArray ($file, $aArray, 0) Then
	   MsgBox(4096,"Error", " Error reading txt to Array     error:" & @error)
	   Exit
EndIf
$aArrayUnique = _ArrayUnique($aArray, 0, 0, 0, 0)
_ArraySort($aArrayUnique)
_FileWriteFromArray($Sortie, $aArrayUnique)

Re: [..] Lister les lignes d’un fichier par ordre alphabétique avec suppression des doublants

Posté : mer. 02 mai 2018 10:07
par Boulanza
Cher Tlem,
Votre solution est parfaite. Merci pour votre aimable aide, je vais changer le titre de ma demande par:
Lister les lignes d’un fichier par ordre alphabétique avec suppression des doublants. Ceci est dans le but de valoriser le titre à ça juste valeur.
Cordialement.