MIRC脚本以在客户列表中查找确切的匹配



我正在使用它在文本文件中查找客户名称。名称每个都在单独的行上。我需要找到确切的名称。如果要专门搜索尼克,它应该只找到尼克,但是即使只有尼克森在TE列表中,我的代码也会发现。

On*:text:*!Customer*:#: {
 if ($read(systemCustomer.txt,$2)) { 
 .msg $chan $2 Customer found in list! | halt }
 else { .msg $chan 4 $2 Customer not found in list. | halt }
}

您必须循环遍历每条匹配行,并查看该行是否确切匹配

类似这样的东西

On*:text:*!Custodsddmer*:#: {
  var %nick
  ; loop over all lines that contains nick
  while ($read(customer.txt, nw, *nick*, $calc($readn + 1))) {
    ; check if the line is an exact match
    if ($v1 == nick) {
      %nick = $v1
      ; stop the loop because a result is found
      break;
    }
  }
  if (%nick == $null) {
    .msg $chan 4 $2 Customer not found in list.
  }
  else{
  .msg $chan $2 Customer found in list!
}

您可以在此处找到更多:https://en.wikichip.org/wiki/mirc/mirc/text_files#iterating_over_matches

如果您在新的行分开列表中寻找精确匹配,则可以在不使用通配符'*'字符的情况下使用'W'开关。

来自MIRC文档

$ read(文件名,[ntswrp],[matchText],[n](

扫描文件info.txt以获取以mirm和单词开始的行 按照匹配值返回文本。//echo $ read(help.txt,w, *帮助*(

因为我们不希望通配符匹配,但是确切的匹配,我们会使用:

$read(customers.txt, w, Nick)

完成代码:

ON *:TEXT:!Customer *:#: {
  var %foundInTheList = $read(systemCustomer.txt, w, $2)
  if (%foundInTheList) {
    .msg # $2 Customer found in list!
  }
  else {
    .msg 4 # $2 Customer not found in list.
  }
}

原始代码上有几句话

停止

halt仅在您强迫停止进行任何将来的处理时才应使用。在大多数情况下,您可以避免它,通过以某种方式编写代码流,而不会明确使用停止。如果您要添加新代码,它也将解决可能出现的新问题,但是您会想知道为什么它不执行。.因为现在忘记了halt命令。这也将改善您调试的情况,在情况下,这不会让您在另一个流出的情况下感到奇怪,而您不知道。

可读性

if (..) {
.... }
else { .. }

在考虑第一个{}内部的许多代码时,它将很难注意到else(或elseif(,因为MIRC远程解析器将在其上方的线路上列出与其他行相同的标识,其中包含该行关闭}代码。您几乎应该总是在可读性的情况下,几乎没有额外的代码,尤其是它花了新的价格!,因为我记得新行是免费的。

因此,请确保在新行中具有每一个命令的重击规则。(包括关闭支架(

匹配文本

On*:text:*!Customer*:#: {

上面的代码有关键问题,并且错误。

批评:无法正常工作,因为在*:文本中没有on*:text之间的空间错误:!customer 将匹配EVERYTHING-BEFORE!customerANDAFTER <NICK>,这显然不是所需的行为。您想要的是:!Customer *:仅在第一个单词是!客户时才匹配,并且您必须至少输入另一个文本,因为我使用了[Space]*。

最新更新