Comparaison dans TXT multi ligne [Résolu]

Messages postés
83
Date d'inscription
jeudi 19 mai 2005
Statut
Membre
Dernière intervention
17 juin 2011
- - Dernière réponse : cs_ShayW
Messages postés
3248
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
30 août 2019
- 17 juin 2011 à 11:33
Bonjour a tous
Voila j'ai TXT multi ligne qui ressemble à cela :
3000 500 200
3000 2500
3000 500 200
J'aimerais pouvoir comparer les lignes et supprimer les doublons
Mais il faut aussi que dans ma première ligne figure le nombre total de ligne identique :
Ce qui donne
2* 3000 500 200
1* 3000 2500
Si jamais vous avez une idée?
Merci d'avance
Afficher la suite 

20/22 réponses

Meilleure réponse
Messages postés
3248
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
30 août 2019
46
3
Merci
qu'as tu dans listbox1 ?

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 196 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_ShayW
Messages postés
3248
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
30 août 2019
46
3
Merci
ok je viens juste de recevoir le message
après avoir envoyé le mien

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 196 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_ShayW
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
61
0
Merci
Salut

Et as-tu tapé "doublon" dans la recherche de <codes en .Net> ?

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Commenter la réponse de cs_Jack
Messages postés
83
Date d'inscription
jeudi 19 mai 2005
Statut
Membre
Dernière intervention
17 juin 2011
0
Merci
Oui, je viens de regarder mais je n'ais rien vue
Je sais cela ne doit pas être trop difficile avec une boucle for
Mais vue que je fais du développement une semaine par ans je suis toujours un éternel débutant....
Commenter la réponse de poilusduboux
Messages postés
3248
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
30 août 2019
46
0
Merci
Salut

Essaie
Imports System.IO
Public Class Form1

    Private Structure datarecord
        Public count As Integer
        Public chaine As String
    End Structure
    Private tableout As New List(Of datarecord)
    Private table As New List(Of String)

    Private Sub ReadFile()
        Dim pathfichier As String
        pathfichier = "E:\test.TXT"
        'je lis tout le fichier dans listitems
        Try
            table = System.IO.File.ReadAllLines(pathfichier).ToList
        Catch ex As Exception
            'en cas d'exception affiche l'erreur 
            MessageBox.Show(ex.Message)

        End Try
    End Sub

    Private Sub WriteFile()
        Dim pathfichier As String
        pathfichier = "E:\testout.TXT"
        Dim outfile As New StreamWriter(pathfichier)
        'j'écris  le fichier 
        Try
            For Each element In tableout
                outfile.WriteLine(String.Concat(element.count, " ", element.chaine))

            Next
            outfile.Close()
        Catch ex As Exception
            'en cas d'exception affiche l'erreur 
            MessageBox.Show(ex.Message)

        End Try

    End Sub
    Private Sub Process()
        Dim count As Integer
        Dim str As String
        Dim datarec As datarecord

        count = 0
        table.Sort()
        str = table(0)
        For Each element In table
            If element = str Then
                count += 1
            Else
                datarec.chaine = str
                datarec.count = count
                tableout.Add(datarec)
                count = 0
                str = element
            End If
        Next
        datarec.chaine = str
        datarec.count = count
        tableout.Add(datarec)
    End Sub

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        ReadFile()
        Process()
        WriteFile()
    End Sub
End Class
Commenter la réponse de cs_ShayW
Messages postés
83
Date d'inscription
jeudi 19 mai 2005
Statut
Membre
Dernière intervention
17 juin 2011
0
Merci
Merci beuacoup je vais essayer.
mais en faite je me suis mal exprimé mes donneés
ne se trouve pas dans un fichier TXT mais dans un textBox multi ligne sur mon form1.
Commenter la réponse de poilusduboux
Messages postés
3248
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
30 août 2019
46
0
Merci
Bon
'plus facile de mettre tes données dans un listbox


Imports System.IO
Public Class Form1

    Private Structure datarecord
        Public count As Integer
        Public chaine As String
    End Structure
    Private tableout As New List(Of datarecord)
    Private table As New List(Of String)


    Private Sub ReadListbox()
        table.Clear()
        For Each item In ListBox1.Items
            table.Add(item)
        Next
    End Sub

    Private Sub WriteTolistbox()
        For Each item In tableout
            ListBox2.Items.Add(String.Concat(item.count, " )", item.chaine))
        Next

    End Sub
    Private Sub Process()
        Dim count As Integer
        Dim str As String
        Dim datarec As datarecord

        count = 0
        table.Sort()
        str = table(0)
        For Each element In table
            If element = str Then
                count += 1
            Else
                datarec.chaine = str
                datarec.count = count
                tableout.Add(datarec)
                count = 0
                str = element
            End If
        Next
        datarec.chaine = str
        datarec.count = count
        tableout.Add(datarec)
    End Sub

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        ReadListbox()
        Process()
        WriteTolistbox()
    End Sub
End Class
Commenter la réponse de cs_ShayW
Messages postés
3248
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
30 août 2019
46
0
Merci
supprime
Imports System.IO

pas besoin
Commenter la réponse de cs_ShayW
Messages postés
83
Date d'inscription
jeudi 19 mai 2005
Statut
Membre
Dernière intervention
17 juin 2011
0
Merci
Voici les erreurs que ton code me donne:
Private Structure datarecord
Public count As Integer
Public chaine As String
End Structure
Private tableout As New List(Of datarecord) Private table As New List(Of String)


Private Sub ReadListbox()
table.Clear()
For Each item In ListBox1.Items
table.Add(item)
Next
End Sub

Private Sub WriteTolistbox()
For Each item In tableout
ListBox2.Items.Add(String.Concat(item.count, " )", item.chaine))
Next

End Sub
Private Sub Process()
Dim count As Integer
Dim str As String
Dim datarec As datarecord

count = 0
table.Sort()
str = table(0)
For Each element In table
If element = str Then
count += 1
Else
datarec.chaine = str
datarec.count = count
tableout.Add(datarec)
count = 0
str = element
End If
Next
datarec.chaine = str
datarec.count = count
tableout.Add(datarec)
End Sub

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
ReadListbox()
Process()
WriteTolistbox()
End Sub
Commenter la réponse de poilusduboux
Messages postés
83
Date d'inscription
jeudi 19 mai 2005
Statut
Membre
Dernière intervention
17 juin 2011
0
Merci
oublie la réponse précédente erreur de frappe
j'ai mis mes données dans une listbox
mais maintenant j'ai plusieurs problème:

1
Private tableout As New List(Of datarecord)(TYPE LIST NON DEFINI)
Private table As New List(Of String)

2
rivate Sub ReadListbox()
table.Clear()
For Each item In ListBox1.Items(ITEM n'est pas déclarer)

3
Private Sub WriteTolistbox()
For Each item In tableout (ITEM n'est pas déclarer)

4
For Each element In table (element n'est pas déclarer)
If element = str Then
count += 1

en tout cas merci beauoup pour ton aide
bonne journée
Commenter la réponse de poilusduboux
Messages postés
3248
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
30 août 2019
46
0
Merci
Salut
as tu bien copié le code
tu as du oublié les lignes suivantes
Private Structure datarecord
    Public count As Integer
     Public chaine As String
End Structure


qu'il faut placer après
Public Class Form1
Commenter la réponse de cs_ShayW
Messages postés
83
Date d'inscription
jeudi 19 mai 2005
Statut
Membre
Dernière intervention
17 juin 2011
0
Merci
Non je n'ais pas oublié de mettre ce code.
mes problème commence içi
 Private tableout As New Generic.List(Of datarecord)          ' List(Of datarecord)
    Private table As New Generic.List(Of String)              'List(Of String)


je dois mettre generic. avant List(Of datarecord)
???
Commenter la réponse de poilusduboux
Messages postés
3248
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
30 août 2019
46
0
Merci
Envoie ton code pour voir
chez moi ça marche
Commenter la réponse de cs_ShayW
Messages postés
83
Date d'inscription
jeudi 19 mai 2005
Statut
Membre
Dernière intervention
17 juin 2011
0
Merci
Voila

Public Class frmOpti
   

    Inherits System.Windows.Forms.Form
    Private Structure datarecord
        Public count As Integer
        Public chaine As String
    End Structure Private Sub Calculate()
        If bLoaded = False Then Exit Sub
        '****** recuperation de la longueur de barres - les chutes******
        BinPackingGraph2.BinHeight = CType(nudBinHeight.Value - CInt(cmbchute.Text) - CInt(cmbchute.Text), Integer)
        '*********************                               *****************************
        BinPackingGraph2.Decreasing = cbDecreasing.Checked
        BinPackingGraph2.Algorithm = CType(cbBinPackingAlgorithm.SelectedIndex, Bin_Packing_Graph.BinPackingGraph.BinPackingAlgorithm)

        Dim strElements() As String = txtElements.Text.Split(" "c)
        Dim intElements(strElements.GetUpperBound(0)) As Integer
        Dim bSuccess As Boolean = True
        Dim i As Integer

        For i = 0 To strElements.GetUpperBound(0)
            If IsNumeric(strElements(i)) Then
                intElements(i) = CType(strElements(i), Integer)
            Else
                bSuccess = False
            End If
        Next

        If bSuccess Then
            BinPackingGraph2.Elements = intElements
            BinPackingGraph2.Compute()
        End If

        ' ****** somme des barres ******
        Dim somme As String

        somme = Bin_Packing_Graph.BinPackingGraph.Nbrs
        txtNbrsBarres.Text = somme


        '****** içi on rempli le txt ******
        Me.txtLigne.Text = ""

        Dim enligne()() As Integer
        Dim k, j As Integer

        enligne = Bin_Packing_Graph.BinPackingGraph.liste


        For k = 0 To enligne.Length - 1
            For j = 0 To enligne(k).Length - 1
                If chkEpaisseur.Checked = False Then
                    txtLigne.Text = txtLigne.Text & enligne(k)(j) & "   "

                Else
                    txtLigne.Text = txtLigne.Text & enligne(k)(j) - 8 & "   "

                End If
            Next

            txtLigne.Text = txtLigne.Text & Environment.NewLine

        Next



        ' içi on rempli le listBox avec le contenu du textBox 
        Dim Tab1() As String
        Dim x As Integer
        Me.ListBox1.Items.Clear()
        Tab1 = Split(txtLigne.Text, vbCrLf)

        For x = 0 To UBound(Tab1)
            ListBox1.Items.Add(Tab1(x))
        Next


        ReadListbox()
        Process()
        WriteTolistbox()
  
    Private tableout As New Generic.List(Of datarecord)          ' List(Of datarecord)
    Private table As New Generic.List(Of String)              'List(Of String)


    Private Sub ReadListbox()




        table.Clear()
        For Each item In ListBox1.Items
            table.Add(item)
        Next
    End Sub

    Private Sub WriteTolistbox()
   

        For Each item In tableout
            ListBox2.Items.Add(String.Concat(item.count, " )", item.chaine))
        Next

    End Sub
    Private Sub Process()
        Dim count As Integer
        Dim str As String
        Dim datarec As datarecord
     

        count = 0
        table.Sort()
        str = table(0)
        For Each element In table
            If element Is str Then
                count += 1
            Else
                datarec.chaine = str
                datarec.count = count
                tableout.Add(datarec)
                count = 0
                str = element
            End If
        Next
        datarec.chaine = str
        datarec.count = count
        tableout.Add(datarec)
    End Sub

 


End Class
Commenter la réponse de poilusduboux
Messages postés
3248
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
30 août 2019
46
0
Merci
c'est quoi cette ligne
End Structure Private Sub Calculate()


où se termine la sub calculate ?
Commenter la réponse de cs_ShayW
Messages postés
83
Date d'inscription
jeudi 19 mai 2005
Statut
Membre
Dernière intervention
17 juin 2011
0
Merci
Dans mon code c'est comme ça:
End Structure
Private Sub Calculate()


la sub calcule se termine juste après
ReadListbox()
Process()
WriteTolistbox()

end sub
Commenter la réponse de poilusduboux
Messages postés
3248
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
30 août 2019
46
0
Merci
places
Private tableout As New Generic.List(Of datarecord)          ' List(Of datarecord)
    Private table As New Generic.List(Of String) 

au début
Private Structure datarecord
        Public count As Integer
        Public chaine As String
    End Structure
    Private tableout As New List(Of datarecord)
    Private table As New List(Of String)
 


je ne sais pas s'il faut generic
Commenter la réponse de cs_ShayW
Messages postés
3248
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
30 août 2019
46
0
Merci
La sub caculate à l'air compliqué
on peut surement simplifier
Commenter la réponse de cs_ShayW
Messages postés
83
Date d'inscription
jeudi 19 mai 2005
Statut
Membre
Dernière intervention
17 juin 2011
0
Merci
Super ça progresse:
donc voici le code que j'ai utilisé sans Bug, mais si tu as encore un peut de temps regarde le résultat il ne correspond pas encore à mes attentes:
  Public Class frmOpti
   

    Inherits System.Windows.Forms.Form
    Private Structure datarecord
        Public count As Integer
        Public chaine As String
    End Structure
    Private tableout As New Generic.List(Of datarecord)
    Private table As New Generic.List(Of String)

Private bLoaded As Boolean = False

    Private Sub Calculate()
        If bLoaded = False Then Exit Sub
        '****** recuperation de la longueur de barres - les chutes******
        BinPackingGraph2.BinHeight = CType(nudBinHeight.Value - CInt(cmbchute.Text) - CInt(cmbchute.Text), Integer)
        '*********************                               *****************************
        BinPackingGraph2.Decreasing = cbDecreasing.Checked
        BinPackingGraph2.Algorithm = CType(cbBinPackingAlgorithm.SelectedIndex, Bin_Packing_Graph.BinPackingGraph.BinPackingAlgorithm)

        Dim strElements() As String = txtElements.Text.Split(" "c)
        Dim intElements(strElements.GetUpperBound(0)) As Integer
        Dim bSuccess As Boolean = True
        Dim i As Integer

        For i = 0 To strElements.GetUpperBound(0)
            If IsNumeric(strElements(i)) Then
                intElements(i) = CType(strElements(i), Integer)
            Else
                bSuccess = False
            End If
        Next

        If bSuccess Then
            BinPackingGraph2.Elements = intElements
            BinPackingGraph2.Compute()
        End If

        ' ****** somme des barres ******
        Dim somme As String

        somme = Bin_Packing_Graph.BinPackingGraph.Nbrs
        txtNbrsBarres.Text = somme


        '****** içi on rempli le txt ******
        Me.txtLigne.Text = ""

        Dim enligne()() As Integer
        Dim k, j As Integer

        enligne = Bin_Packing_Graph.BinPackingGraph.liste


        For k = 0 To enligne.Length - 1
            For j = 0 To enligne(k).Length - 1
                If chkEpaisseur.Checked = False Then
                    txtLigne.Text = txtLigne.Text & enligne(k)(j) & "   "

                Else
                    txtLigne.Text = txtLigne.Text & enligne(k)(j) - 8 & "   "

                End If
            Next

            txtLigne.Text = txtLigne.Text & Environment.NewLine

        Next



        ' içi on rempli le listBox avec le contenu du textBox 
        Dim Tab1() As String
        Dim x As Integer
        Me.ListBox1.Items.Clear()
        Tab1 = Split(txtLigne.Text, vbCrLf)

        For x = 0 To UBound(Tab1)
            ListBox1.Items.Add(Tab1(x))
        Next

        ' içi on rempli le listBox2 avec le contenu du ListBox1 


        ReadListbox()
        Process()
        WriteTolistbox()
End Sub
 
    Private Sub ReadListbox()
       Dim item As String   '''Rajout de ma part
   table.Clear()
        For Each item In ListBox1.Items
            table.Add(item)
        Next
    End Sub

    Private Sub WriteTolistbox()
        Dim item As datarecord   '''Rajout de ma part

        For Each item In tableout
            ListBox2.Items.Add(String.Concat(item.count, " )", item.chaine))
        Next

    End Sub
    Private Sub Process()

        Dim count As Integer
        Dim str As String
        Dim datarec As datarecord
        Dim element As String   '''Rajout de ma part

        count = 0
        table.Sort()
        str = table(0)
        For Each element In table
            If element Is str Then
                count += 1
            Else
                datarec.chaine = str
                datarec.count = count
                tableout.Add(datarec)
                count = 0
                str = element
            End If
        Next
        datarec.chaine = str
        datarec.count = count
        tableout.Add(datarec)
    End Sub


Resultat :
1 )
0 )3500 2500
0 )3500 2500
0 )1500 700

Resultat attendu:
2 )3500 2500
1 )1500 700
Commenter la réponse de poilusduboux
Messages postés
83
Date d'inscription
jeudi 19 mai 2005
Statut
Membre
Dernière intervention
17 juin 2011
0
Merci
dans la Listbox1 il y a :
3500 2500
3500 2500
1500 700
c'est la même chose que dans la Listbox2
après traitement sans 1 ) 0) etc...
Commenter la réponse de poilusduboux