Improve company productivity with a Business Account.Sign Up

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

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
Asked:
michael123199
  • 2
1 Solution
 
TomLaw1999Commented:
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
 
Anthony PerkinsCommented:
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
   AddValueCounter aValues(), lValue1
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
Do While Not Found
   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
 
michael123199Author 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

Can you please help me out ?



0
 
Anthony PerkinsCommented:
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.

Join & Write a Comment

Featured Post

Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now