乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 159|回复: 6

修复嵌套的If-Then语句

[复制链接]

68

主题

179

帖子

6

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
451
发表于 2020-5-24 02:45:33 | 显示全部楼层 |阅读模式
大家好。

可能我发现了VBScript的一个错误。我用VBScript函数if-then-elseif-else语句做了大量的创建和试验,我发现在保存我的绘图之前有些东西是有效的,但我知道我再次检查只是停止工作。







我将多个函数链接到函数名“NAME_BY_OBJECT”,它为每个不同的对象生成不同的名称。在图1和图2中,一切都是正确的...

...但是当我添加对象类型“吊架”时,发生了一些奇怪的事情:






...同样,一切正常,但只是使用了吊架,但我在检查电缆槽和电缆槽配件时发生了这种情况:







我不知道这里发生了什么。
那么:
1)我是不是做错了什么?
2)如果是,我该如何解决这个问题?
3)如果不是,是什么问题,有哪些替代方案?

PD:附件
之前:
  1. If "[ObjectType]" = "Cable Tray" Then
  2.         RESULT = "[NAME_CABLE_TRAY]"
  3. ElseIf "[ObjectType]" = "Cable Tray Fitting" Then
  4.         RESULT = "[NAME_CABLE_TRAY_FITTING]"
  5. Else
  6.         RESULT = "NA"
  7. End If


之后:

  1. If "[ObjectType]" = "Cable Tray" Then
  2.         RESULT = "[NAME_CABLE_TRAY]"
  3. ElseIf "[ObjectType]" = "Cable Tray Fitting" Then
  4.         RESULT = "[NAME_CABLE_TRAY_FITTING]"
  5. ElseIf "[ObjectType]" = "Hanger" Then
  6.         RESULT = "[NAME_HANGER]"
  7. Else
  8.         RESULT = "NA"
  9. End If


本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

61

主题

792

帖子

35

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1015
发表于 2020-5-24 20:24:39 | 显示全部楼层
我不做很多VB脚本的东西,所以你必须告诉我这是否合法。
嵌套的IF-Then语句是糟糕的编程。你应该尽可能避免使用它们。并且永远不要在return语句后使用ELSE语句。虽然,我认为在VB脚本中“结果”不一定是“返回”语句,所以这就是为什么我说你需要告诉我我发布的代码片段是否合法。
您最好使用下面这样的小IF语句。你为你的变量建立一个缺省值(如果你绝对需要的话),并且像这样使用小的if语句。理论是,当且如果,结果关键字是一个返回(在这种情况下,你可以省略第一行),当一个if语句为真时,代码将停止执行。
如果RESULT关键字不是“return”语句,那么您应该使用类似下面的语句:
  1. RESULT = "NA"
  2. If "[ObjectType]" = "Cable Tray" Then
  3.         RESULT = "[NAME_CABLE_TRAY]"
  4. End If
  5. If "[ObjectType]" = "Cable Tray Fitting" Then
  6.         RESULT = "[NAME_CABLE_TRAY_FITTING]"
  7. End If
  8. If "[ObjectType]" = "Hanger" Then
  9.         RESULT = "[NAME_HANGER]"
  10. End If

但是,如果RESULT关键字是“return”语句,则代码将如下所示:
  1. If "[ObjectType]" = "Cable Tray" Then
  2.         RESULT = "[NAME_CABLE_TRAY]"
  3. End If
  4. If "[ObjectType]" = "Cable Tray Fitting" Then
  5.         RESULT = "[NAME_CABLE_TRAY_FITTING]"
  6. End If
  7. If "[ObjectType]" = "Hanger" Then
  8.         RESULT = "[NAME_HANGER]"
  9. End If

否则,我猜elseif语句是有限制的,也就是说您只能使用一个。
回复

使用道具 举报

68

主题

179

帖子

6

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
451
发表于 2020-5-26 02:05:24 | 显示全部楼层

很抱歉这么晚才回答。我测试了很多东西来解决这个问题,我测试了你的代码,你的代码工作正常,但是当不是嵌套函数时,这仍然不能解决嵌套的if语句,因为在支持每个函数的字符数方面可能存在任何未记录的限制或类似的限制,我正在尝试找到它。所以以后我会继续更新这个帖子。
PD:谢谢你的帮助,也谢谢你是一个伟大的版主。
回复

使用道具 举报

68

主题

179

帖子

6

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
451
发表于 2020-5-26 13:15:27 | 显示全部楼层

再次向您问好,我终于找到了一个可能的解决方案。
您的代码发布在此处:
  1. RESULT = "NA"
  2. If "[ObjectType]" = "Cable Tray" Then
  3.         RESULT = "[NAME_CABLE_TRAY]"
  4. End If
  5. If "[ObjectType]" = "Cable Tray Fitting" Then
  6.         RESULT = "[NAME_CABLE_TRAY_FITTING]"
  7. End If
  8. If "[ObjectType]" = "Hanger" Then
  9.         RESULT = "[NAME_HANGER]"
  10. End If

...工程和解决问题,但我需要在每个公式函数中插入这个结构,但我需要添加一个额外的比较语句和过滤器对象,最终减少字符的数量。
...大概是这样的:
  1. RESULT = "NA"
  2. If ("[ObjectType]") = ("Cable Tray") And ("ParType" = "Trunking") Then
  3.         RESULT = "[NAME_CABLE_TRAY]"
  4. End If
  5. If ("[ObjectType]") = ("Cable Tray Fitting") And ("ParType" = "Elbow")Then
  6.         RESULT = "[NAME_CABLE_TRAY_FITTING]"
  7. End If
  8. If ("[ObjectType]") = ("Hanger") Then ("Anchor_System" = "Electric")
  9.         RESULT = "[NAME_HANGER]"
  10. End If

但是这需要分析每个公式,且完全失去了它们美丽,出于这个动机,我在结尾添加了If ElseIf Else End If语句代码6]
这是原始脚本,理论上应该可以工作,但实际上不行。Else语句,最后不应该让代码工作吗?我的意思是,Else在结尾应该等同于开头的“RESULT=”。我在做坏事吗?
回复

使用道具 举报

61

主题

792

帖子

35

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1015
发表于 2020-5-26 13:32:10 | 显示全部楼层
很高兴我的代码有效。
我不会太担心IF-IFELSE-ELSE语句中未记录的限制;我会避免使用它们。它们通常是非常糟糕的编程方法。
尝试替换它:
  1. If(boolean_expression) Then
  2.    Statement n
  3. ElseIf (boolean_expression) Then
  4.    Statement n
  5. ElseIf (boolean_expression) Then
  6.    Statement n
  7. Else
  8.    Statement n
  9. End If

使用这种方法:
  1. Select Case expression
  2.    Case expressionlistN
  3.       statementN
  4.    Case expressionlistN
  5.       statementN
  6.   Case Else
  7.       elsestatementN
  8. End Select

您是对的,ELSE语句旨在提供一个“默认”值。
我发布的代码块可能不那么“漂亮”,但它读起来干净多了(您的意图毋庸置疑)。也就是说(从处理器的角度来说):
“变量集。测试:测试-失败。...测试:变量被重新定义"
回复

使用道具 举报

68

主题

179

帖子

6

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
451
发表于 2020-5-27 09:09:14 | 显示全部楼层
1.我已经很久没有使用VB了。
2.Elseif在VB中还不错。它清理代码,并做与分解代码相同的事情。
3.我的直觉告诉我,是“挂钩”这个词导致了这个问题。请参见#1。
您是否尝试过测试不同的标签而不是衣架?
回复

使用道具 举报

68

主题

179

帖子

6

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
451
发表于 2020-5-28 01:38:34 | 显示全部楼层

我同意,增加一个名字不应该打破公式…问题已经解决了。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2024-11-22 02:03 , Processed in 0.280309 second(s), 72 queries .

© 2020-2024 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表