我想按照lotusscript中的频率对字段值(字符串)进行排序。 有谁有想法解决这个问题?
非常感谢。
答案 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以某种方式完成工作。