Посчитайте, какое число больше всего. В VBScript - PullRequest
0 голосов
/ 02 марта 2010

Я получил этот файл через запятую с кучей цифр

Единственное, что мне нужно, это найти номер, который появляется чаще всего

Ex: 817; 9; 516; 11; 817; 408; 9; 817

тогда результат будет 817 Я надеюсь, вы понимаете, что я пытаюсь сделать.

Ответы [ 3 ]

0 голосов
/ 02 марта 2010

Я бы просмотрел текст и посчитал количество ваших номеров. после этого я бы переделал динамический массив. - пройти текст от начала до конца и сохранить его в массиве.

после этого я бы выбрал первое число, прошел через массив и посчитал (например, в tmpcounter) количество дубликатов. [Вы можете сохранить подсчитанное число из текстового файла в tmphit]

Если вы выберете второе число, посчитайте количество дубликатов (tmpcounter2 / tmphit2)

сравнив два счетчика, вы "держите" старшее и используете младшее для следующего числа

... продолжайте до тех пор, пока не будет проверено последнее поле.

в конце вы знаете, какое число появляется чаще всего и как часто.

Надеюсь, это поможет вам. это то, как я бы запрограммировал это, может быть, есть лучший способ или API.

в конце вы знаете

0 голосов
/ 02 марта 2010

Попробуйте это

Set objFile = CreateObject("Scripting.FileSystemObject").OpenTextFile("C:\Test.txt",1)
Set dictNumbers = CreateObject("Scripting.Dictionary")

Dim MostKey
intHighest = -1

do while NOT objFile.AtEndOfStream
    LineArray = Split(objFile.ReadLine,";")
    for i = 0 to UBound(LineArray)
        if dictNumbers.Exists(LineArray(i)) Then
            dictNumbers.Item(LineArray(i)) = dictNumbers.Item(LineArray(i)) + 1
        else
            dictNumbers.Add LineArray(i), 1
        end if
        if dictNumbers.Item(LineArray(i)) > intHighest Then
            intHeighest = dictNumbers.Item(LineArray(i))
            MostKey = LineArray(i)
        end if
    next
Loop 

MsgBox MostKey
0 голосов
/ 02 марта 2010

Я бы предложил использовать FileSystemObjects , в частности, метод OpenTextFile для чтения файла, а затем использовать функцию split для разделения по столбцам. Затем выполните итерацию возвращенного массива и посчитайте, сколько раз каждое число встречается.

Следующий код подсчитает ваш массив для вас. Используется полезный Словарь объект.

Set counts = CreateObject("Scripting.Dictionary")

For i = Lbound(arr) to Ubound(arr)
    If Not counts.Exists(arr(i)) Then
        counts.add arr(i), 1
    Else
        currCount = counts.Item(arr(i))
        counts.Item(arr(i)) = currCount + 1
    End If
Next 

nums = counts.Keys()
currMax = 0
currNum = 0

For i = Lbound(nums) to Ubound(nums)
    If counts.Item(nums(i)) > currMax Then
        currMax = counts.Item(nums(i))
        currNum = nums(i)
    End If
Next 

num = currNum ' Most often found number
max = currMax ' Number of times it was found
...