Lotusscript:如何按频率对字段值(一个单词数组)进行排序

时间:2014-04-28 10:08:01

标签: sorting frequency lotusscript

我想按照lotusscript中的频率对字段值(字符串)进行排序。 有谁有想法解决这个问题?

非常感谢。

2 个答案:

答案 0 :(得分:0)

如果你能提供帮助,我个人会避免使用LotusScript。你将遇到无法解决的limitations

无论您采取哪种方式,从性能的角度来看,最好让View索引完成工作。

所以你要创建一个视图。第一列如下。

  • 列值:您要检查的字段。
  • 排序:升序
  • 类型:分类

在此之后,您可以使用NotesViewNavigator访问数据。相关方法调用是getNextCategory。这将为您提供一个视图输入对象,您可以调用ChildCount来获取总计。

例如(免责声明:从内存写入的代码,不保证可以运行):

Dim sess As New NotesSession
Dim db As NotesDatabase
Dim vw As NotesView
Dim nav as NotesViewNavigator
Dim entryA As NotesViewEntry
Dim entryB As NotesViewEntry    

Set db = sess.CurrentDatabase

Set vw = db.GetView("testView")

vw.AutoUpdate = False

Set nav = vw.CreateViewNav

Set entryA = nav.GetFirst
while entryA not Nothing 
    Set entryB = nav.GetNextCategory(entryA)
    if entryB not nothing then 

        ' Do your processing. 
        ' entryB.childCount will give total.

    end if

    set EntryA = EntryB

Wend

view.AutoUpdate = True

这样,繁重的提升(字符串排序,计数)由View索引处理。所以你只需要处理最终结果。

答案 1 :(得分:0)

要直接回答op(旧)问题,在LotusScript中执行此操作的方法既简单又容易:

dim para as string
dim words as variant
dim fq list as long

'get the text to freq-count
para = doc.text '(or $ from somewhere)
'tidy up para by removing/replacing characters you don't want
para = replace(para, split(". , : ; - [ ] ()"), "")
words = split(para) 'or split(words, "delim") - default is space
forall w in words
if iselement(words(w)) then
   fq(w) = fq(w) + 1
Else
   fq(w) = 1
End forall
'you now have a count of each individual word in the FQ list

'to get the words out and the word frequencies (not sorted):
forall x in fq
   print listtag(x) = x
End forall

多数民众赞成。 LotusScript没有问题 - 快速简单(列表可能很大)。要获得一个排序列表,您必须移动到一个数组并对其进行排序或移动到一个字段,让@sort以某种方式完成工作。