?
Solved

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

Posted on 2010-08-27
12
Medium Priority
?
923 Views
Last Modified: 2012-05-10
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.
0
Comment
Question by:jazjef
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
12 Comments
 
LVL 8

Expert Comment

by:Mohit Vijay
ID: 33548469
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
 
LVL 1

Expert Comment

by:kollurirk
ID: 33548488
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
 

Expert Comment

by:pbskat
ID: 33548682
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
Stack Overflow Podcast - Developer Story

Welcome to the Stack Overflow podcast recorded Thursday July 20 at Stack Overflow Headquearters in NYC. Your hosts today are podcast regulars Jay Hanlon, David Fullerton, and Ilana Yitzhaki, plus the quite irregular Matt Sherman (Stack Overflow Engineering Manager extraordinaire)

 
LVL 4

Author Comment

by:jazjef
ID: 33549544
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
 
LVL 4

Author Comment

by:jazjef
ID: 33549553
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
 
LVL 86

Accepted Solution

by:
Mike Tomlinson earned 2000 total points
ID: 33549604
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
 
LVL 4

Expert Comment

by:coolcurrent4u
ID: 33551106
as a general advice, the items in the listbox must be sorted before doing any looping to check for suplicates
0
 
LVL 86

Expert Comment

by:Mike Tomlinson
ID: 33551144
...no sorting or inner looping required using the Collection technique in my post.  =)
0
 
LVL 4

Author Comment

by:jazjef
ID: 33551160
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
 
LVL 86

Expert Comment

by:Mike Tomlinson
ID: 33551162
We'd need to see your drag/drop code and your implementation of my code to hopefully spot the problem and solve it...  =)
0
 
LVL 4

Author Comment

by:jazjef
ID: 33551250
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
 
LVL 4

Author Closing Comment

by:jazjef
ID: 33551252
Excellent.
0

Featured Post

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Enums (shorthand for ‘enumerations’) are not often used by programmers but they can be quite valuable when they are.  What are they? An Enum is just a type of variable like a string or an Integer, but in this case one that you create that contains…
If you need to start windows update installation remotely or as a scheduled task you will find this very helpful.
Get people started with the process of using Access VBA to control Outlook using automation, Microsoft Access can control other applications. An example is the ability to programmatically talk to Microsoft Outlook. Using automation, an Access applic…
Get people started with the process of using Access VBA to control Excel using automation, Microsoft Access can control other applications. An example is the ability to programmatically talk to Excel. Using automation, an Access application can laun…
Suggested Courses
Course of the Month10 days, 6 hours left to enroll

764 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question