x
• Status: Solved
• Priority: Medium
• Security: Public
• Views: 258

# occurences

I've got a lot of lines in a text file like these:

23544,50,50
43443,40,30
23344,60,70
23544,50,22
43443,40,50
and so on...

Now I would like to count up the number of occurences of each first value on the line.

0
michael123199
• 2
1 Solution

Commented:
1) Open the text file
2) Read in the values one line at a time
3) Sort the lines into numeric order
4) Count the grouped lines based upon the first value.

Are you after pseudo code or do you need help with a specific portion of the program?
0

Commented:
Assuming that the values are all integers than the following should work (Modify RANGE for performance):

Private Type ValueType
Value As Long
Counter As Long
End Type

Private Const RANGE = 100
Private Sub Command1_Click()
Dim Handle As Integer
Dim lValue1 As Long
Dim lValue2 As Long
Dim lValue3 As Long

ReDim aValues(1 To RANGE) As ValueType
Handle = FreeFile
Open "your file name goes here" For Input As Handle
Do While Not EOF(Handle)
Input #Handle, lValue1, lValue2, lValue3
Loop
ShowResults aValues()
Close Handle

End Sub

Private Sub AddValueCounter(aValues() As ValueType, ByVal lValue As Long)
Dim Found As Boolean
Dim I As Integer

Found = False
I = 1
If I > UBound(aValues) Then
ReDim Preserve aValues(1 To I + RANGE) As ValueType
End If
If aValues(I).Value = 0 Then
aValues(I).Value = lValue
aValues(I).Counter = 1
Found = True
ElseIf aValues(I).Value = lValue Then
aValues(I).Counter = aValues(I).Counter + 1
Found = True
Else
I = I + 1
End If
Loop

End Sub

Private Sub ShowResults(aValues() As ValueType)
Dim Done As Boolean
Dim I As Integer

Done = False
I = 1
Do While Not Done
If I > UBound(aValues) Then
Done = True
ElseIf aValues(I).Value Then
Debug.Print aValues(I).Value, aValues(I).Counter
I = I + 1
Else
Done = True
End If
Loop

End Sub

Anthony
0

Author Commented:
ok, tnx anthony so far.. but i ran your code and nothing happened (i'm a vb rookie)... I altered the line Open "your file name goes here" For Input As Handle
to Open "c:\test.txt" For Input As Handle

and made the file test.txt with as content:
23544,50,50
43443,40,30
23344,60,70
23544,50,22
43443,40,50

0

Commented:
Here goes step instructions:
1. Start a new project
2. Add a Command Button (called Command1)
3. Paste the code I posted, but make the file name match yours.
4. Run the code.
5. Press the Command button (Command1)
6. Take a look at the Immediate window, the results should be as follows:
23544         2
43443         2
23344         1

If you are still having difficulties. Try changing the following line:

Debug.Print aValues(I).Value, aValues(I).Counter

to

MsgBox CStr(aValues(I).Value) & "-->" & CStr(aValues(I).Counter)

This will display each value and the count separately in a MsgBox.

Anthony
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.