Comparaison dans TXT multi ligne

Résolu
poilusduboux Messages postés 83 Date d'inscription jeudi 19 mai 2005 Statut Membre Dernière intervention 17 juin 2011 - 10 juin 2011 à 15:59
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 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

22 réponses

cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
16 juin 2011 à 18:00
qu'as tu dans listbox1 ?
3
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
17 juin 2011 à 11:33
ok je viens juste de recevoir le message
après avoir envoyé le mien
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
10 juin 2011 à 19:55
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)
0
poilusduboux Messages postés 83 Date d'inscription jeudi 19 mai 2005 Statut Membre Dernière intervention 17 juin 2011
15 juin 2011 à 11:49
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....
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
15 juin 2011 à 15:39
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
0
poilusduboux Messages postés 83 Date d'inscription jeudi 19 mai 2005 Statut Membre Dernière intervention 17 juin 2011
15 juin 2011 à 15:55
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.
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
15 juin 2011 à 17:06
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
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
15 juin 2011 à 17:08
supprime
Imports System.IO

pas besoin
0
poilusduboux Messages postés 83 Date d'inscription jeudi 19 mai 2005 Statut Membre Dernière intervention 17 juin 2011
16 juin 2011 à 08:54
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
0
poilusduboux Messages postés 83 Date d'inscription jeudi 19 mai 2005 Statut Membre Dernière intervention 17 juin 2011
16 juin 2011 à 09:03
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
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
16 juin 2011 à 10:10
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
0
poilusduboux Messages postés 83 Date d'inscription jeudi 19 mai 2005 Statut Membre Dernière intervention 17 juin 2011
16 juin 2011 à 10:35
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)
???
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
16 juin 2011 à 10:52
Envoie ton code pour voir
chez moi ça marche
0
poilusduboux Messages postés 83 Date d'inscription jeudi 19 mai 2005 Statut Membre Dernière intervention 17 juin 2011
16 juin 2011 à 11:13
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
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
16 juin 2011 à 11:26
c'est quoi cette ligne
End Structure Private Sub Calculate()


où se termine la sub calculate ?
0
poilusduboux Messages postés 83 Date d'inscription jeudi 19 mai 2005 Statut Membre Dernière intervention 17 juin 2011
16 juin 2011 à 11:43
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
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
16 juin 2011 à 12:33
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
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
16 juin 2011 à 12:37
La sub caculate à l'air compliqué
on peut surement simplifier
0
poilusduboux Messages postés 83 Date d'inscription jeudi 19 mai 2005 Statut Membre Dernière intervention 17 juin 2011
16 juin 2011 à 14:42
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
0
poilusduboux Messages postés 83 Date d'inscription jeudi 19 mai 2005 Statut Membre Dernière intervention 17 juin 2011
17 juin 2011 à 08:24
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...
0
Rejoignez-nous