How do I remove duplicate items from a VB6 listbox based on the last 2 or last 3 characters of the item?

Using VB6 I want to pop up a message box that warns of duplicate data in a listbox.

For example, I have a listbox with the following items in the list:

P Jones_RD
T Thomas_HH
J Holcomb_Z
G Ricks_YT
H Martin_RD
N Smith_KB
H Berger_X
B Brett_VR
J Morton_CR
L Johnson_X

I need to be able to detect any duplicate extensions including the underscore; the extensions are either an underscore and one letter, or an underscore and two letters. I need to detect the duplicate occurrence of the _RD and the _X in this list and popup a MsgBox that says "Duplicate data extensions detected". Thanks for any help.
LVL 4
jazjefAsked:
Who is Participating?
 
Mike TomlinsonConnect With a Mentor Middle School Assistant TeacherCommented:
Try something like this:
Private Sub Command1_Click()
    On Error GoTo KeyAlreadyExists
    
    Dim i As Integer
    Dim col As New Collection
    Dim values As Variant
    Dim extension As String

    For i =  0 To List1.ListCount - 1 
        values = Split(List1.List(i), "_")
        If UBound(values) >= 1 Then
            extension = values(UBound(values))
            col.Add extension, extension
        End If
    Next i
    Exit Sub
    
KeyAlreadyExists:
    MsgBox "Duplicate data extension detected." & vbCrLf & vbCrLf & "Extension: " & extension
End Sub

Open in new window

0
 
Mohit VijayCommented:
one option is to loop throw all items (n*n loop) and using Right/Mid function of vb, you can do it.

or before binding with listbox, you can manipulate it in your datasource.
0
 
kollurirkCommented:
you can run a loop for list box in a reverse order.
check for the letter '_' using  'mid' function and remove the list content.  
0
Cloud Class® Course: MCSA MCSE Windows Server 2012

This course teaches how to install and configure Windows Server 2012 R2.  It is the first step on your path to becoming a Microsoft Certified Solutions Expert (MCSE).

 
pbskatCommented:
In VB6 you have to do it manually, i.e. with a nested loop:

for i = 1 to <listbox-items.count>
  for j = i + 1 to <listbox-items.count>
    if (mid(<listboxitem(i)>, instr(<listboxitem(i)>, "_")) = _
        mid(<listboxitem(j)>, instr(<listboxitem(j)>, "_")) _
    then
        call msgbox("Duplicate item found")
        exit for
    end if
  next j
next i
0
 
jazjefAuthor Commented:
pbskat:

OK... using your code suggestion I have arrived at a solution that does the reverse of what I want.... it pops a message when everything to the LEFT of the "_" is duplicated in the list; I need help to reverse this code so that it does the opposite (identifies duplicates to the RIGHT of the "_")

Dim i As Integer
Dim j As Integer

For i = 1 To List1.ListCount - 1
  For j = i + 1 To List1.ListCount - 1
    If Mid(List1.List(i), 1, Len(List1.List(i)) - 3) = Mid(List1.List(j), 1, Len(List1.List(j)) - 3) Then
        MsgBox ("Duplicate item found")
    Exit For
    End If
  Next j
Next i





0
 
jazjefAuthor Commented:
PS:  The piece of code I just posted only references the extensions that have 2 characters after the "_".... I need it to reference both one and two characters after the "_" (However, I could just put a second loop in and use a -2 in the Len portion to catch those)
0
 
coolcurrent4uCommented:
as a general advice, the items in the listbox must be sorted before doing any looping to check for suplicates
0
 
Mike TomlinsonMiddle School Assistant TeacherCommented:
...no sorting or inner looping required using the Collection technique in my post.  =)
0
 
jazjefAuthor Commented:
Thanks Idle_Mind, this works great! But for some reason I can't integrate it in my program. I want to call this routine whenever an item is dragged/dropped into a listbox....but even when an item that does not exist is dropped into the list, the msgbox fires.

If you don't want to continue on this question that's understandable----you've solved the problem exactly as stated in my question. I can open a new question for the drag-drop problem.
0
 
Mike TomlinsonMiddle School Assistant TeacherCommented:
We'd need to see your drag/drop code and your implementation of my code to hopefully spot the problem and solve it...  =)
0
 
jazjefAuthor Commented:
thanks Idle_Mind.... your solution works for this problem. My actual problem is that I have 2 problems that need solving.... so, there will be another question coming down the pike....
0
 
jazjefAuthor Commented:
Excellent.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.