Bonsoir,
Petite question d'un débutant.
Dans une msflexgrid, je charge a partir d'un petit fichier .txt des données
avec des chiffres en tête de ligne.
Désirant faire un tri descendant ou ascendant sur les chiffres, j'utilise la
fonction SORT.
Le résultat n'est pas vraiment dans l'ordre, j'obtient :
1
10
11
...
2
20
21
22
...
3
etc....
Je peux résoudre le problème en utilisant la fonction FORMAT avec "0000" .
Mais ça m'affiche les zéros (0001 - 0002 etc..)
Pas très sur de ma méthode, y-a-t'il une autre solution?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
LE TROLL
Bonjour,
Une méthode VB qui t'évite les variables, car plus ténébreux, ça ne se voit pas directement, soit:
-1- tu prends une liste (list1), propriété sorted=true -2- De ton fichier txt, à chaque ligne tu récupères le nombre en chaîne (string), puis pour être certain tu convertis ce nombre (entiers semble-t-il) en numérique, puis tu le balances dans la liste qui va tes les trier... soit:
Dim nbStr As String Dim nbNum As Long List1.Clear nbStr = le nombre nbNum = Val(nbStr) List1.AddItem nbNum
-------------- Par contre si tu veux la méthode artisanale, il doit y en avoir d'autres avec la gestion de tableaux:
dim x as long dim nb() as long dim trans as long dim i as long dim j as long ' tu comptes combien tu as de nombre = x redim nb(x) for i = 1 to x for j = 1 to x-1 if nb(i) > nb(i+1) then trans = nb(i+1) nb(i) = nb(i+1) nb(i+1) = trans exit for endif next j next i
Fait de tête et non vérifié, si ça plante, dis :o)
-- Merci beaucoup, au revoir et à bientôt :o) ------ Site de MES LOGICIELS http://irolog.free.fr Site éditeur MES ROMANS édités Le serpent http://www.manuscritdepot.com/a.joseph-attila-pusztay.1.htm Le Gaulois http://manuscritdepot.com/a.joseph-attila-pusztay.2.htm mon adresse EMail http://irolog.free.fr/ecrire/index.htm ------------------------------------------------------------------------------------ "Gg" a écrit dans le message de news: 4581b254$0$11516$
Bonsoir, Petite question d'un débutant. Dans une msflexgrid, je charge a partir d'un petit fichier .txt des données avec des chiffres en tête de ligne. Désirant faire un tri descendant ou ascendant sur les chiffres, j'utilise la fonction SORT. Le résultat n'est pas vraiment dans l'ordre, j'obtient : 1 10 11 ... 2 20 21 22 ... 3 etc....
Je peux résoudre le problème en utilisant la fonction FORMAT avec "0000" . Mais ça m'affiche les zéros (0001 - 0002 etc..) Pas très sur de ma méthode, y-a-t'il une autre solution?
Par avance Merci Gg
Bonjour,
Une méthode VB qui t'évite les variables, car plus ténébreux, ça ne se
voit pas directement, soit:
-1- tu prends une liste (list1), propriété sorted=true
-2- De ton fichier txt, à chaque ligne tu récupères le nombre en chaîne
(string), puis pour être certain tu convertis ce nombre (entiers
semble-t-il) en numérique, puis tu le balances dans la liste qui va tes les
trier... soit:
Dim nbStr As String
Dim nbNum As Long
List1.Clear
nbStr = le nombre
nbNum = Val(nbStr)
List1.AddItem nbNum
--------------
Par contre si tu veux la méthode artisanale, il doit y en avoir d'autres
avec la gestion de tableaux:
dim x as long
dim nb() as long
dim trans as long
dim i as long
dim j as long
' tu comptes combien tu as de nombre = x
redim nb(x)
for i = 1 to x
for j = 1 to x-1
if nb(i) > nb(i+1) then
trans = nb(i+1)
nb(i) = nb(i+1)
nb(i+1) = trans
exit for
endif
next j
next i
Fait de tête et non vérifié, si ça plante, dis :o)
--
Merci beaucoup, au revoir et à bientôt :o)
------
Site de MES LOGICIELS
http://irolog.free.fr
Site éditeur MES ROMANS édités
Le serpent
http://www.manuscritdepot.com/a.joseph-attila-pusztay.1.htm
Le Gaulois
http://manuscritdepot.com/a.joseph-attila-pusztay.2.htm
mon adresse EMail
http://irolog.free.fr/ecrire/index.htm
------------------------------------------------------------------------------------
"Gg" <Gg@nospam.fr> a écrit dans le message de news:
4581b254$0$11516$426a74cc@news.free.fr...
Bonsoir,
Petite question d'un débutant.
Dans une msflexgrid, je charge a partir d'un petit fichier .txt des
données
avec des chiffres en tête de ligne.
Désirant faire un tri descendant ou ascendant sur les chiffres, j'utilise
la
fonction SORT.
Le résultat n'est pas vraiment dans l'ordre, j'obtient :
1
10
11
...
2
20
21
22
...
3
etc....
Je peux résoudre le problème en utilisant la fonction FORMAT avec "0000" .
Mais ça m'affiche les zéros (0001 - 0002 etc..)
Pas très sur de ma méthode, y-a-t'il une autre solution?
Une méthode VB qui t'évite les variables, car plus ténébreux, ça ne se voit pas directement, soit:
-1- tu prends une liste (list1), propriété sorted=true -2- De ton fichier txt, à chaque ligne tu récupères le nombre en chaîne (string), puis pour être certain tu convertis ce nombre (entiers semble-t-il) en numérique, puis tu le balances dans la liste qui va tes les trier... soit:
Dim nbStr As String Dim nbNum As Long List1.Clear nbStr = le nombre nbNum = Val(nbStr) List1.AddItem nbNum
-------------- Par contre si tu veux la méthode artisanale, il doit y en avoir d'autres avec la gestion de tableaux:
dim x as long dim nb() as long dim trans as long dim i as long dim j as long ' tu comptes combien tu as de nombre = x redim nb(x) for i = 1 to x for j = 1 to x-1 if nb(i) > nb(i+1) then trans = nb(i+1) nb(i) = nb(i+1) nb(i+1) = trans exit for endif next j next i
Fait de tête et non vérifié, si ça plante, dis :o)
-- Merci beaucoup, au revoir et à bientôt :o) ------ Site de MES LOGICIELS http://irolog.free.fr Site éditeur MES ROMANS édités Le serpent http://www.manuscritdepot.com/a.joseph-attila-pusztay.1.htm Le Gaulois http://manuscritdepot.com/a.joseph-attila-pusztay.2.htm mon adresse EMail http://irolog.free.fr/ecrire/index.htm ------------------------------------------------------------------------------------ "Gg" a écrit dans le message de news: 4581b254$0$11516$
Bonsoir, Petite question d'un débutant. Dans une msflexgrid, je charge a partir d'un petit fichier .txt des données avec des chiffres en tête de ligne. Désirant faire un tri descendant ou ascendant sur les chiffres, j'utilise la fonction SORT. Le résultat n'est pas vraiment dans l'ordre, j'obtient : 1 10 11 ... 2 20 21 22 ... 3 etc....
Je peux résoudre le problème en utilisant la fonction FORMAT avec "0000" . Mais ça m'affiche les zéros (0001 - 0002 etc..) Pas très sur de ma méthode, y-a-t'il une autre solution?
Par avance Merci Gg
Jean-marc
"Gg" a écrit dans le message de news: 4581b254$0$11516$
Bonsoir, Petite question d'un débutant. Dans une msflexgrid, je charge a partir d'un petit fichier .txt des données avec des chiffres en tête de ligne. Désirant faire un tri descendant ou ascendant sur les chiffres, j'utilise la fonction SORT. Le résultat n'est pas vraiment dans l'ordre, j'obtient : 1 10 11 ... 2 20 21 22 ... 3 etc....
Je peux résoudre le problème en utilisant la fonction FORMAT avec "0000" . Mais ça m'affiche les zéros (0001 - 0002 etc..) Pas très sur de ma méthode, y-a-t'il une autre solution?
Hello,
c'est parce que tu tries des chaines de caractères et pas des nombres. Tes chaines sont bien classées en ordre, mais en ordre lexicographique, comme dans un dictionnaire. A AA ABC AZE B BA etc.
Il faut donc travailler sur des nombres. Tu peux implémenter différentes méthodes de tris, en fonciton de tes données, du nombre de données, etc.
Voici une petite fonction qui te permet en un seul appel de lire les données de ton fichier et de les récupérer dans un tableu trié. Voici:
Option Explicit
Private Sub Command1_Click()
Dim t() As Long Dim n As Long Dim bRet As Boolean Dim i As Long Dim szFileName As String
szFileName = "c:data.txt" bRet = GetFromFileAndSort(szFileName, t(), n, 1) If bRet Then For i = LBound(t()) To UBound(t()) Debug.Print t(i) Next i Else MsgBox "Erreur." End If
End Sub
Public Function GetFromFileAndSort(ByVal szFileName As String, _ t() As Long, _ ByRef n As Long, _ ByVal Direction As Integer) As Boolean Dim f As Integer Dim szValue As String Dim value As Variant Dim curSize As Long
If Dir$(szFileName) <> "" Then n = -1 f = FreeFile Open szFileName For Input As #f While Not EOF(f) Line Input #f, szValue If szValue <> "" Then value = CLng(szValue) n = n + 1 If n > curSize Then curSize = (n + 1) * 2 ReDim Preserve t(curSize) End If t(n) = value End If Wend Close #f ReDim Preserve t(n) If n > 0 Then SortTab t, Direction End If GetFromFileAndSort = True Else GetFromFileAndSort = False End If End Function
Public Sub SortTab(t() As Long, Direction As Integer) Dim i As Long Dim finished As Boolean Dim mustPermut As Boolean Dim tmp As Variant
Do finished = True For i = LBound(t()) To UBound(t()) - 1 Select Case Direction Case 1 mustPermut = t(i) > t(i + 1) Case 2 mustPermut = t(i) < t(i + 1) End Select If mustPermut Then finished = False tmp = t(i) t(i) = t(i + 1) t(i + 1) = tmp End If Next i Loop While Not finished
"Gg" <Gg@nospam.fr> a écrit dans le message de news:
4581b254$0$11516$426a74cc@news.free.fr...
Bonsoir,
Petite question d'un débutant.
Dans une msflexgrid, je charge a partir d'un petit fichier .txt des
données
avec des chiffres en tête de ligne.
Désirant faire un tri descendant ou ascendant sur les chiffres, j'utilise
la
fonction SORT.
Le résultat n'est pas vraiment dans l'ordre, j'obtient :
1
10
11
...
2
20
21
22
...
3
etc....
Je peux résoudre le problème en utilisant la fonction FORMAT avec "0000" .
Mais ça m'affiche les zéros (0001 - 0002 etc..)
Pas très sur de ma méthode, y-a-t'il une autre solution?
Hello,
c'est parce que tu tries des chaines de caractères et pas des
nombres. Tes chaines sont bien classées en ordre, mais en ordre
lexicographique, comme dans un dictionnaire.
A
AA
ABC
AZE
B
BA
etc.
Il faut donc travailler sur des nombres. Tu peux implémenter
différentes méthodes de tris, en fonciton de tes données,
du nombre de données, etc.
Voici une petite fonction qui te permet en un seul appel
de lire les données de ton fichier et de les récupérer dans
un tableu trié.
Voici:
Option Explicit
Private Sub Command1_Click()
Dim t() As Long
Dim n As Long
Dim bRet As Boolean
Dim i As Long
Dim szFileName As String
szFileName = "c:data.txt"
bRet = GetFromFileAndSort(szFileName, t(), n, 1)
If bRet Then
For i = LBound(t()) To UBound(t())
Debug.Print t(i)
Next i
Else
MsgBox "Erreur."
End If
End Sub
Public Function GetFromFileAndSort(ByVal szFileName As String, _
t() As Long, _
ByRef n As Long, _
ByVal Direction As Integer) As Boolean
Dim f As Integer
Dim szValue As String
Dim value As Variant
Dim curSize As Long
If Dir$(szFileName) <> "" Then
n = -1
f = FreeFile
Open szFileName For Input As #f
While Not EOF(f)
Line Input #f, szValue
If szValue <> "" Then
value = CLng(szValue)
n = n + 1
If n > curSize Then
curSize = (n + 1) * 2
ReDim Preserve t(curSize)
End If
t(n) = value
End If
Wend
Close #f
ReDim Preserve t(n)
If n > 0 Then
SortTab t, Direction
End If
GetFromFileAndSort = True
Else
GetFromFileAndSort = False
End If
End Function
Public Sub SortTab(t() As Long, Direction As Integer)
Dim i As Long
Dim finished As Boolean
Dim mustPermut As Boolean
Dim tmp As Variant
Do
finished = True
For i = LBound(t()) To UBound(t()) - 1
Select Case Direction
Case 1
mustPermut = t(i) > t(i + 1)
Case 2
mustPermut = t(i) < t(i + 1)
End Select
If mustPermut Then
finished = False
tmp = t(i)
t(i) = t(i + 1)
t(i + 1) = tmp
End If
Next i
Loop While Not finished
"Gg" a écrit dans le message de news: 4581b254$0$11516$
Bonsoir, Petite question d'un débutant. Dans une msflexgrid, je charge a partir d'un petit fichier .txt des données avec des chiffres en tête de ligne. Désirant faire un tri descendant ou ascendant sur les chiffres, j'utilise la fonction SORT. Le résultat n'est pas vraiment dans l'ordre, j'obtient : 1 10 11 ... 2 20 21 22 ... 3 etc....
Je peux résoudre le problème en utilisant la fonction FORMAT avec "0000" . Mais ça m'affiche les zéros (0001 - 0002 etc..) Pas très sur de ma méthode, y-a-t'il une autre solution?
Hello,
c'est parce que tu tries des chaines de caractères et pas des nombres. Tes chaines sont bien classées en ordre, mais en ordre lexicographique, comme dans un dictionnaire. A AA ABC AZE B BA etc.
Il faut donc travailler sur des nombres. Tu peux implémenter différentes méthodes de tris, en fonciton de tes données, du nombre de données, etc.
Voici une petite fonction qui te permet en un seul appel de lire les données de ton fichier et de les récupérer dans un tableu trié. Voici:
Option Explicit
Private Sub Command1_Click()
Dim t() As Long Dim n As Long Dim bRet As Boolean Dim i As Long Dim szFileName As String
szFileName = "c:data.txt" bRet = GetFromFileAndSort(szFileName, t(), n, 1) If bRet Then For i = LBound(t()) To UBound(t()) Debug.Print t(i) Next i Else MsgBox "Erreur." End If
End Sub
Public Function GetFromFileAndSort(ByVal szFileName As String, _ t() As Long, _ ByRef n As Long, _ ByVal Direction As Integer) As Boolean Dim f As Integer Dim szValue As String Dim value As Variant Dim curSize As Long
If Dir$(szFileName) <> "" Then n = -1 f = FreeFile Open szFileName For Input As #f While Not EOF(f) Line Input #f, szValue If szValue <> "" Then value = CLng(szValue) n = n + 1 If n > curSize Then curSize = (n + 1) * 2 ReDim Preserve t(curSize) End If t(n) = value End If Wend Close #f ReDim Preserve t(n) If n > 0 Then SortTab t, Direction End If GetFromFileAndSort = True Else GetFromFileAndSort = False End If End Function
Public Sub SortTab(t() As Long, Direction As Integer) Dim i As Long Dim finished As Boolean Dim mustPermut As Boolean Dim tmp As Variant
Do finished = True For i = LBound(t()) To UBound(t()) - 1 Select Case Direction Case 1 mustPermut = t(i) > t(i + 1) Case 2 mustPermut = t(i) < t(i + 1) End Select If mustPermut Then finished = False tmp = t(i) t(i) = t(i + 1) t(i + 1) = tmp End If Next i Loop While Not finished