Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json 修剪字符串末尾的最后一个字符_Json_Loops_Vbscript_Asp Classic - Fatal编程技术网

Json 修剪字符串末尾的最后一个字符

Json 修剪字符串末尾的最后一个字符,json,loops,vbscript,asp-classic,Json,Loops,Vbscript,Asp Classic,我有一个循环在创建字符串,直到文件结束。取决于我当时有多少产品。我需要删掉结尾的最后一个逗号 我得到: { 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_p

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

我得到:

{ 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 }

循环:


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

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 
do直到rsheadercart.eof
如果项目为“”,则
项目=项目&“
如果结束
items=items&“{sku:”&rsheadercart(“十位数零件号”)&“,”
项目=项目和“显示名称:”&rsheadercart(“部分名称”)&“
项目=项目和“单价:&rsheadercart(“价格”)&”
项目=项目和数量:&rsheadercart(“数量”)和“}”
rsheadercart.movenext
环

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

在循环之后添加

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

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

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


如果不想使用Arraylist,也可以使用普通数组,但每次迭代都必须对其进行重新分配。

这不是VBA。可以计算循环次数并将其存储在变量中,循环结束后,当最后一个字符大于1时将其删除。这看起来像经典的ASP。它不可能同时是经典的ASP和ASP.NET,它们在结尾处去掉了逗号,但现在一开始就有了逗号,可以尝试不同的条件,例如
如果items“”,那么
。如果项目在循环开始时已经有一个值,那么使用该值而不是空引号。`我已经编辑了答案,以便它显示正确的条件语句。不需要所有这些混乱,只需在循环完成后处理最后一个逗号-
items=Left(items,Len(items)-1)
。您还可以在
rsheadercart.movenext
之后添加if语句,并检查
if不是rsheadercart.eof
是否在每个循环的末尾而不是开始处添加逗号更为自然。虽然LakykyMART的解决方案可能对这种情况有点干净,但是在循环中有逻辑的其他用例是一个很好的考虑因素。既然VBScript提升变量,则需要在每次迭代中清除<代码>项目< /代码>的内容。这条线在运行时只运行一次。@Kul Tigin发现得很好。修好了,是的!这比在循环的每次迭代中都使用
If
子句要干净得多。更高效,更容易阅读。
items = Left(items, Len(items) - 1)
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,",")