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

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Boulanza
Niveau 7
Niveau 7
Messages : 314
Enregistré le : mer. 31 juil. 2013 14:49
Status : Hors ligne

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

#1

Message par Boulanza » mar. 01 mai 2018 17:38

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
Modifié en dernier par Boulanza le mer. 02 mai 2018 18:30, modifié 3 fois.

Boulanza
Niveau 7
Niveau 7
Messages : 314
Enregistré le : mer. 31 juil. 2013 14:49
Status : Hors ligne

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

#2

Message par Boulanza » mar. 01 mai 2018 21:00

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)
Modifié en dernier par Boulanza le mer. 02 mai 2018 09:10, modifié 1 fois.

Boulanza
Niveau 7
Niveau 7
Messages : 314
Enregistré le : mer. 31 juil. 2013 14:49
Status : Hors ligne

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

#3

Message par Boulanza » mar. 01 mai 2018 21:27

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
Modifié en dernier par Boulanza le mer. 02 mai 2018 09:11, modifié 1 fois.

Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11252
Enregistré le : ven. 20 juil. 2007 20:00
Localisation : Bordeaux
Status : Hors ligne

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

#4

Message par Tlem » mar. 01 mai 2018 21:58

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)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".

Boulanza
Niveau 7
Niveau 7
Messages : 314
Enregistré le : mer. 31 juil. 2013 14:49
Status : Hors ligne

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

#5

Message par Boulanza » mer. 02 mai 2018 09:07

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.

Répondre