【问题标题】:Trim the last character at the end of string修剪字符串末尾的最后一个字符
【发布时间】:2020-06-18 20:22:17
【问题描述】:

我有一个循环创建一个字符串,直到文件结束。取决于我当时有多少产品。我需要修剪最后一个逗号。

我明白了:

{ sku: '6200', display_name:'Product 1', unit_price: 497.37, qty: 1 },  
{ sku: '2344', display_name:'Product 2', unit_price: 824.21, qty: 1 },

我需要:

{ sku: '6200', display_name:'Product 1', unit_price: 497.37, qty: 1 },  
{ sku: '2344', display_name:'Product 2', unit_price: 824.21, qty: 1 }

循环:

<%
set rsheadercart = db.execute(sqlheadercart)
    if not rsheadercart.eof then 
        do until rsheadercart.eof 




            items = items & " { sku: '" & rsheadercart("ten_digit_part_number") & "',"
            items = items & " display_name:'" & rsheadercart("part_name") & "',"
            items = items & " unit_price: " & rsheadercart("price") & ","
            items = items & " qty: " & rsheadercart("quantity") & " }, "


        rsheadercart.movenext
        loop 
        %>
<%
end if 
%>

【问题讨论】:

  • 这不是 VBA。
  • 也许可以计算你循环多少次并将其存储在一个变量中,在循环之后,当它大于 1 时删除最后一个字符。
  • 这看起来像经典的 ASP。不能同时是 Classic ASP 和 ASP.net

标签: json loops vbscript asp-classic


【解决方案1】:

多年来发现最简单的方法是让循环生成额外的字符,而不是在循环执行后使用Left()修剪它。

在你的循环添加之后;

items = Left(items, Len(items) - 1)

这种方式避免了在循环中添加大量逻辑来处理不必要的边缘情况。

【讨论】:

  • 是的!这比循环的每次迭代都执行Ifclause 要干净得多。更高效,更易于阅读。
【解决方案2】:

将逗号移到循环的开头并将其放在条件语句中,这样它就不会在第一次迭代时执行

do until rsheadercart.eof 

    If items <> "" then 
       items = items & ","
    End If     

    items = items & " { sku: '" & rsheadercart("ten_digit_part_number") & "',"
    items = items & " display_name:'" & rsheadercart("part_name") & "',"
    items = items & " unit_price: " & rsheadercart("price") & ","
    items = items & " qty: " & rsheadercart("quantity") & " } "

rsheadercart.movenext
loop 

【讨论】:

  • 最后去掉了逗号,现在开头多了一个逗号
  • 也许可以尝试不同的条件,例如If items &lt;&gt; "" then。如果项目在循环开始时已经有一个值,则使用该值而不是空引号。
  • `我已经编辑了答案,以便它显示正确的条件语句。
  • 不需要那些杂乱无章的东西,只需处理循环结束后的最后一个逗号 - items = Left(items, Len(items) - 1)
  • 您还可以在rsheadercart.movenext 之后添加if 语句,并检查if NOT rsheadercart.eof,如果在每个循环的末尾而不是在开头添加逗号感觉更自然。虽然 Lankymart 的解决方案在这种情况下可能更简洁一些,但在其他用例中,将逻辑置于循环中是一种值得考虑的好技术。
【解决方案3】:

在这种情况下,我经常使用Join 方法

dim itemList 
set itemList = CreateObject("System.Collections.ArrayList")
do until rsheadercart.eof 
    dim item       
    item = " { sku: '" & rsheadercart("ten_digit_part_number") & "',"
    item = item & " display_name:'" & rsheadercart("part_name") & "',"
    item = item & " unit_price: " & rsheadercart("price") & ","
    item = item & " qty: " & rsheadercart("quantity") & " } "
    itemList.Add item
    rsheadercart.movenext
loop 
items = Join(itemList.ToArray,",")

如果您不想使用 Arraylist,您可以对普通数组执行相同操作,但每次迭代都必须重新调整它。

【讨论】:

  • 由于 VBScript 会提升变量,因此您需要在每次迭代中清除 item 的内容,循环内的 Dim item 不会为您执行此操作。该行仅在运行时运行一次。
  • @Kul-Tigin 很好发现。修好了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-04
  • 2018-12-24
  • 2011-02-25
  • 2013-09-11
  • 1970-01-01
相关资源
最近更新 更多