IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBScript Discussion :

tri dans un fichier.txt


Sujet :

VBScript

  1. #1
    Futur Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 7
    Points : 7
    Points
    7
    Par défaut tri dans un fichier.txt
    Bonjours a tous,

    je suis entrain de travailler sur un script vbs qui lit un fichier texte déjà créer puis il crée un autre fichier texte avec les lignes du premier fichier classer par ordre alphabétique, exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    contenu du premier fichier.txt :
    reseau,ipesec,.....,....
    cisco,chap1,....,.....
    le script vbs va lire chaque ligne est les remettre par ordre alphabétique dans un autre, donc le contenu du deuxième fichier.txt va etre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    cisco,chap1,....,.....
    reseau,ipesec,.....,....
    ici le code que j'ai crée,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    Option Explicit
    Dim objFichier, MyFile,File
    Const Lire = 1
    '**************************
    ' Creation objet lire
    Set objFichier=CreateObject("Scripting.FileSystemObject")
     
    '************************** 
    Set MyFile= objFichier.OpenTextFile("fichier.txt",Lire)
     
    Set File= objFichier.OpenTextFile("fichier2.txt",8, True)
     
    Dim ligne,i,a,x
    DO WHILE NOT MyFile.AtEndOfStream 
    Ligne = myfile.readline
    a=Split(ligne,chr(44),4)
    for each x in a
    wscript.echo x
    File.Write x & chr(44) 
    next
    LOOP 'fin lire
    MyFile.Close
    WScript.quit 0
    Donc j'ai réussi a récupérer les valeurs séparé par "," dans le premier fichier.txt et de les mettre dans x grâce a la fonction split pour les avoir comme sous forme de variables pour pouvoir les classé.

    Mon premier problème c'est que je n'arrive pas a écrire les valeurs dans x, ligne par ligne, 4 par 4, ils sont mit sur la même ligne...

    Deuxième problème : comment faire le tri alphabétique a l'aide de la première valeur de chaque ligne ?
    Quelqu'un peut m'aider
    note je débute avec vbscript,
    merci d'avance

  2. #2
    Membre confirmé Avatar de pitchalov
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 340
    Points : 582
    Points
    582
    Par défaut
    Bonjour,

    Si j'ai bien compris, tu veux trier les lignes de ton fichier en les comparant l'une avec l'autre, c'est ça? (Ou alors veux-tu trier le contenu de chaque ligne en prenant comme séparateur la virgule? Ou alors les 2?)

    Si c'est bien ce que j'ai compris, voici un script qui fait cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    ''''''''''
    ' Options
    Option Explicit
    '''''
     
    ''''''''''
    ' Function CompareValues()
    Function CompareValues(strValueA, strValueB, intCompType)
    	If intCompType = vbTextCompare Then
    		CompareValues = StrComp(strValueA, strValueB, vbTextCompare)
    	Else	'intCompType = vbBinaryCompare
    		If strValueA < strValueB Then
    			CompareValues = -1
    		ElseIf strValueA = strValueB Then
    			CompareValues = 0
    		Else
    			CompareValues = 1
    		End If
    	End If
    End Function
    '''''
     
    ''''''''''
    ' Function SwapValues()
    Sub SwapValues(strValueA, strValueB)
    	Dim strTemp
    	strTemp = strValueB
    	strValueB = strValueA
    	strValueA = strTemp
    End Sub
    '''''
     
    ''''''''''
    ' Function QuickSort()
    Sub QuickSort(arrValues, intMinIndex, intMaxIndex, intCompType)
    	Const INT_LESS = -1
    	Const INT_MORE = 1
     
    	Dim strMediumValue
    	Dim intRandIndex, intLowIndex, intHighIndex
     
    	If intMinIndex >= intMaxIndex Then Exit Sub
    		Randomize()
    		intRandIndex = Int(Rnd * (intMaxIndex - intMinIndex)) + intMinIndex
    		SwapValues arrValues(intMaxIndex), arrValues(intRandIndex)
    		strMediumValue = arrValues(intMaxIndex)
     
    		intLowIndex = intMinIndex
    		intHighIndex = intMaxIndex
    		Do
    			Do While (intLowIndex < intHighIndex) AND NOT (CompareValues(arrValues(intLowIndex), strMediumValue, intCompType) = INT_MORE)
    				intLowIndex = intLowIndex + 1
    			Loop
    			Do While (intHighIndex > intLowIndex) AND NOT (CompareValues(arrValues(intHighIndex), strMediumValue, intCompType) = INT_LESS)
    				intHighIndex = intHighIndex - 1
    			Loop
    			If intLowIndex < intHighIndex Then
    				SwapValues arrValues(intLowIndex), arrValues(intHighIndex)
    			End If
    		Loop While intLowIndex < intHighIndex
    		SwapValues arrValues(intLowIndex), arrValues(intMaxIndex)
     
    		If (intLowIndex - intMinIndex) < (intMaxIndex - intLowIndex) Then
    			QuickSort arrValues, intMinIndex, intLowIndex - 1, intCompType
    			QuickSort arrValues, intLowIndex + 1, intMaxIndex, intCompType
    		Else
    			QuickSort arrValues, intLowIndex + 1, intMaxIndex, intCompType
    			QuickSort arrValues, intMinIndex, intLowIndex - 1, intCompType
    		End If
    End Sub
    '''''
     
    ''''''''''
    ' Vars
    Dim objFso, objFileIn, objFileOut
    Dim arrFileContent
    Dim strLine
    Dim intLineCounter
    '''''
     
    ''''''''''
    ' Main
    Set objFso=CreateObject("Scripting.FileSystemObject")
    Set objFileIn= objFso.OpenTextFile("fichier.txt", 1)
    Redim arrFileContent(0)
    intLineCounter = 0
     
    Do Until objFileIn.AtEndOfStream
    	Redim Preserve arrFileContent(intLineCounter)
    	arrFileContent(intLineCounter) = objFileIn.readline
    	intLineCounter = intLineCounter + 1
    Loop 
    objFileIn.Close
     
    Quicksort arrFileContent, LBound(arrFileContent), UBound(arrFileContent), vbTextCompare
     
    Set objFileOut = objFso.CreateTextFile("fichier2.txt", True)
    For Each strLine In arrFileContent
    	objFileOut.WriteLine strLine
    Next
    objFileOut.Close
    '''''
     
    ''''''''''
    'Clean up objects vars
    Set objFso = Nothing
    Set objFileIn = Nothing
    Set objFileOut = Nothing
    '''''
     
    ''''''''''
    'End
    WScript.Echo "END"
    WScript.quit
    '''''
    Action du script :
    - Lecture du 1er fichier texte : toutes les lignes sont placées dans un tableau.
    - Tri rapide sur le tableau (fonction récupérée sur le net et reprise à ma sauce) en faisant une comparaison de type texte (Case Insensitive).
    - Ecriture du contenu du tableau dans le 2eme fichier

    Bonne continuation.

  3. #3
    Futur Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    désolé pour le retard, c bien sa ! ça marche très bien !! merci beaucoup mon ami j'ai essayé de comprendre le code mais vu mon niveau c un peut compliqué a comprendre sinon es ce que tu peux m'expliqué qu'es ce que la fonction QuickSort() fait ??

    Merci encore

    a plus

  4. #4
    Membre confirmé Avatar de pitchalov
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 340
    Points : 582
    Points
    582
    Par défaut
    Salut. Ravi que ce code t'aie aidé.
    Pour info, la fonction QuickSort effectue un tri rapide sur le tableau passé en paramètre.
    Le tri rapide (http://fr.wikipedia.org/wiki/Tri_rapide) est un algorithme de tri sur tableau parmi d'autres (http://fr.wikipedia.org/wiki/Algorithme_de_tri).

  5. #5
    Membre actif Avatar de lionel86500
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2013
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2013
    Messages : 144
    Points : 214
    Points
    214
    Par défaut
    Bonjour PITCHALOV

    Merci pour ce script qui fonctionne comme je le souhaite.

    j'ai une question supplémentaire :
    - Si je souhaite trier sur une donnée autre que la première comment je doit procéder ?

    dans l'exemple je voudrais trier sur le prénom (deuxième zone) ou bien l'âge (troisième zone)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    durand,pierre,26
    dupont,jacques,32
    bruxelles,leon,60
    courir,jean,40
    D'avance merci
    Déjà merci pour l'exemple donné
    Lionel

Discussions similaires

  1. Ouvrir et écrire dans un fichier .txt en T-SQL
    Par joul's dans le forum MS SQL Server
    Réponses: 11
    Dernier message: 27/10/2008, 21h04
  2. Tri dans un fichier txt
    Par kimous dans le forum Langage
    Réponses: 16
    Dernier message: 27/03/2008, 22h12
  3. Date dans un fichier txt
    Par cali1983 dans le forum C++
    Réponses: 6
    Dernier message: 23/05/2005, 17h35
  4. Réponses: 10
    Dernier message: 05/10/2004, 11h28
  5. [langage] tabulation dans un fichier txt
    Par TigreRouge dans le forum Langage
    Réponses: 2
    Dernier message: 16/08/2004, 17h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo