You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在TCL脚本API中实现getWater与getSoda响应过滤?

解决TCL脚本过滤API响应的问题

问题背景

调用CLI命令getWater时,API返回的结果条目末尾用1标记Water、0标记Soda,但目前会同时返回两类结果;需要实现过滤逻辑:调用getWater只保留末尾为1的条目,调用getSoda只保留末尾为0的条目。

通用过滤实现代码

直接封装一个通用过程,不管是过滤Water还是Soda都能用:

proc filterDrinks {cliCmd targetFlag} {
    # 执行CLI命令拿到原始输出
    set rawOutput [exec $cliCmd]
    # 把输出按行拆成列表,方便逐行处理
    set allLines [split $rawOutput "\n"]
    set filteredResult [list]

    foreach line $allLines {
        # 跳过空行避免干扰
        if {$line eq ""} continue
        # 提取行末尾的标识位
        set currentFlag [string index $line end]
        # 匹配目标标识就保留该行
        if {$currentFlag eq $targetFlag} {
            lappend filteredResult $line
        }
    }
    # 把过滤后的结果重新拼成多行输出
    puts [join $filteredResult "\n"]
}

# 调用方式:
# 只拿Water结果
filterDrinks getWater "1"
# 只拿Soda结果
filterDrinks getSoda "0"

针对现有代码的快速修改

如果你已经有调用CLI的代码片段,比如:

# 原代码示例
set rawResult [exec getWater]
puts $rawResult

可以直接在获取结果后插入过滤逻辑:

set rawResult [exec getWater]
set filteredLines [list]
foreach line [split $rawResult "\n"] {
    # 非空行且末尾是1才保留
    if {$line ne "" && [string index $line end] eq "1"} {
        lappend filteredLines $line
    }
}
puts [join $filteredLines "\n"]

关键逻辑说明

  • 用string index $line end快速提取每行最后一个字符,也就是标识位
  • 通过foreach遍历所有行,配合条件判断筛选符合要求的条目
  • 用split和join处理多行文本的拆分与拼接,保证输出格式和原始API一致

内容的提问来源于stack exchange,提问作者sam k

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 19:00:52