如何设置单词分隔符?

时间:2013-05-17 17:19:09

标签: arrays word associative-array delimiter livecode

用户指南第6.1.5章 Word Chunk 单词是由空格,制表符或返回字符分隔的字符串或用双引号括起来的字符串。是否可以使用其他单词分隔符?

我有以下代码片段取自用户指南第6.5.1节“何时使用数组”,p。 184

on mouseUp

   --cycle through each word adding each instance to an array
   repeat for each word tWord in field "sample text"
      add 1 to tWordCount[tWord]
   end repeat

   -- combine the array into text
   combine tWordCount using return and comma
   answer tWordCount

end mouseUp

它计算“示例文本”字段中每个单词形式的出现次数。

我意识到,在使用默认设置将单词计算为单词的一部分后,完全停止。

如何更改句号(和/或逗号)被视为字边界的设置?

3 个答案:

答案 0 :(得分:1)

或者,您可以在处理之前删除有问题的字符。 这可以使用REPLACE函数或“REPLACETEXT函数”完成。 REPLACETEXT函数可以使用正则表达式匹配字符串,但比REPLACE函数慢。所以我在这里使用REPLACE函数。

on mouseUp
   put field "sample" into twords
   --remove all trailing puncuation and quotes
   replace "." with "" in twords
   replace "," with "" in twords
   replace "?" with "" in twords
   replace ";" with "" in twords
   replace ":" with "" in twords
   replace quote with "" in twords
   --hyphenated words need to be seperated?
   replace "-" with " " in twords

   repeat for each word tword in twords
       add 1 to twordcount[tword]
   end repeat
   combine twordcount using return and comma
  answer twordcount
end mouseUp

答案 1 :(得分:1)

我想你在问一个关于分隔符的问题。一些分隔符是内置的:

单词的空格,

项目的逗号,

返回(CR)行。

创建自己的自定义分隔符属性(itemDelimiter)的功能是该语言的强大功能,属于“项目”。您可以将其设置为任何单个字符:

将itemDelimiter设置为“C”

回答“XXCXXCXX”中的项目数 - 请输入此字符串“theText”

结果将是“3”

正如其他人所指出的那样,将一个字符串替换为另一个字符串的方法允许对自定义文本解析进行强大的控制:

将“C”替换为文本

中的空格

产生“XX XX XX”

克雷格纽曼

答案 2 :(得分:0)

正如用户指南在第6.1.5章中所述 Word Chunk 一个单词是由空格,制表符或返回字符分隔的字符串或用双引号括起来。

itemDelimiter但不是wordDelimiter

因此,在将单词添加到单词计数数组之前,首先要删除标点符号。

这可以使用函数effectiveWord完成。

function effectiveWord aWord
   put last char of aWord into it
   if it is "." then delete last char of aWord
   if it is "," then delete last char of aWord
   if it is ":" then delete last char of aWord
   if it is ";" then delete last char of aWord
   return aWord
end effectiveWord



on mouseUp

   --cycle through each word adding each instance to an array
   repeat for each word tWord in field "Sample text"
      add 1 to tWordCount[effectiveWord(tWord)]
   end repeat

   -- combine the array into text
   combine tWordCount using return and comma
   answer tWordCount

end mouseUp