如何在列表中创建值列表及其频率?

时间:2015-08-14 03:10:56

标签: arrays string vba sorting

我每天运行一份报告,根据特定的标识符列出各种文件,这些标识符指示文件中的内容。为了加快我的工作流程,我想通过标识符在一个简单的报告中设置这些文件,以及每个标识符发生的频率,并将这个列表从最频繁到最不频繁地组织。以下是我正在使用的内容:

  1. 这是一个基于VBA的终端模拟器,具有有限的对象库引用,因此Excel不是一个选项
  2. 任何报告通常都有0到200个单独的标识符,并且它们并不总是出现在每个报告上。由于可能会出现数千种可能的标识符,我宁愿让宏列表找到它而不是专门查找它们。
  3. 我使用一些代码利用ADOdb流将类似的报告写入.txt文件,我想在这里使用。我确信我可以在数据排序后实现这一点,但是如果过滤/组织列表的使用方式的性质会影响它的处理方式,那么我觉得值得一提。
  4. 我是一个新手,自学成才的程序员,特别害怕数组(我知道这将归结为数组......)。所以我不一定知道在编码时我可以使用哪些命令和选项。 (也就是说,很多我读过的内容可能涉及字典或集合,但我不确定我是否有这些可用,更不用说如何使用它们了。)
  5. 我宁愿避免创建多个数组,并尽可能创建多个For循环。看起来像二维动态数组SortList(类别,频率)将是要走的路线,但我找不到一种方法来过滤唯一值,同时计算它已经找到的任何值,然后排序事后呢。

    我在一个网站上发现了一个非常漂亮的代码,它可以在不使用循环的情况下过滤唯一值...(归功于它到期的地方:http://www.jpsoftwaretech.com/finding-values-in-an-array-without-looping/),但它似乎只适用于一维数组:

        Function IsInArray(arr As Variant, valueToFind As Variant) As Boolean
        IsInArray = (UBound(Filter(arr, valueToFind)) > -1)
        End Function
    

    有没有人对如何应对这种困境提出任何建议?

    8/14 - 假设这一点也很重要:这些不是可以在某个文件夹中访问的单个文件;我正在使用的数据只是一个列表。最好说明我正在做的是将这些标识符读作字符串。这是我想要计算,排序和组织的字符串...它似乎可以用初学者的编程技术完成,我似乎无法找到一种方法来做到没有多余的数组或不必要的嵌套循环,如果/然后条件。思考?

2 个答案:

答案 0 :(得分:1)

如果您熟悉ADO / DAO,可以尝试查询文件,确保相关字段位于GROUP BY中并输出标识符的COUNT()结果。

答案 1 :(得分:0)

或者,您可以使用集合和数组的组合。

GSeg很好地说明了如何利用这里的数组集合。 Collection of Arrays

通过使用集合,您可以将标识符添加为Key,将其计数添加为第二个数组元素。 由于您无法复制集合中的密钥,因此如果您将标识符用作密钥,它将为您提供唯一的列表。当您尝试添加重复键时,您只需要捕获错误并增加该键的计数。计数将是该集合键的数组中的第二个元素。

希望这是有道理的。祝你好运。