如何在制表符分隔的数组中进行整个单词搜索

时间:2015-10-29 09:01:29

标签: livecode

我有一个类似下面列表的数组。

我需要通过查找它出现的哪一行来找到颜色的id,并且该行的第一项是颜色的id。

我尝试了以下代码,但它无法正常工作,因为我相信它是在整行中搜索整个单词。如何更改代码以使lineoffset onlt应用于每行的第二项?

set the wholeMatches to true
put lineOffset("red",colors) into theLine

1蓝色

2粉红色

3红橙色

4 orange

5绿色

6红色

7 black

8黄色

4 个答案:

答案 0 :(得分:1)

使用其他信息进行编辑:

获得这条线真的很重要吗?你可以尝试:

put returnNum("Diarrhea",gArrSymptoms)

function returnNum tItem, list
 repeat for each line L in list
  put L into tempL
  delete word 1 of tempL
  set the wholeMatches to true
  if lineOffset(tItem, tempL) >0 then return word 1 of L
 end repeat
end returnNum

此外,颜色是LiveCode中的保留字,所以我在这里使用了tColors。

答案 1 :(得分:1)

您也可以使用过滤器命令。

filter lines of gArrSymptoms with "*" & tab & theSymptom & "*" into temp
put word 1 of temp into theIndex

“theSympton”是您正在查找的症状,“theIndex”是您想要的数字。

*是一个通配符,用于捕获行的开头和结尾。

需要“标签”以确保在主要组件之前未选择辅助组件。 例如“腹泻”包括两次作为次要术语以及一次作为主要术语。

这让我想知道如何确保首先选择正确的术语。

如果您的数组位于列表字段中,那么该字段的以下脚本也会为您提供所需的索引..

on mouseup
   put word 1 of the hilitedline of me
end mouseup

答案 2 :(得分:0)

LineOffset搜索多行,但在您的示例中,您只有一行。通常,您可以在一行中使用wordOffset,但是您有一个额外的挑战,因为您的一个颜色名称使用多个单词。因此,您可以将所有单词视为项目,并使用itemOffset函数:

put "1 blue 2 pink 3 reddish orange 4 orange 5 green 6 red 7 black 8 yellow" into theList
set the itemDel to space
set the wholeMatches to true
put itemOffset("reddish orange",theList) - 1 into N
put item N of theList into theColorID

答案 3 :(得分:0)

假设您有一个包含以下数据的字段:

2 Abdominal cramps
11 Abdominal pain
7 Bloody Diarrhea
16 Confusion
8 Cramps
5 Diarrhea
9 Facial pallor
6 Fever
13 Headache
12 Jaundice
3 Nausea
14 Stiff neck
10 Tea-colored urine
4 Vomiting
1 Watery diarrhea
15 Weakness

在每条记录中使用行分隔记录和制表符分隔的项目。您可以使用以下语法检索列表中任何症状的ID号:

put word 1 of line (lineoffset(tab & "Headache"& cr,fld 1 & cr)) of fld 1