首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AMPSCRIPT -使用for循环构建字符串

AMPSCRIPT -使用for循环构建字符串
EN

Stack Overflow用户
提问于 2014-09-06 02:11:08
回答 1查看 9.7K关注 0票数 2

我想打印出这个数据库中朋友的不同名字。根据选择的名字,它将打印出与该名字相关联的朋友列表。

代码语言:javascript
复制
%%[

    FOR @y = 1 TO @friendRowcount DO 
        Set @friendRow = Row(@friendRows,@y)
        Set @friendName = Lookup("DB_FriendIDToName","friend_name","friendid",FIELD(@FriendRow,"friendid"),"language",Lowercase(@lookupLang))    

        Set @NameList = CONCAT(@NameList, @friendName, ", ")

    NEXT @y
    Set @bodytext = Replace(@bodytext,"PLACEHOLDERFRIENDNAMES", @NameList)


    Set @bodyText = "Your friends are PLACEHOLDERFRIENDNAMES."
]%%

%%=v(@bodyText)=%%

问题是它只打印出一个名字,而不是逗号分隔的列表。看到列表的长度通常与其他列表不同,我不知道如何动态地做到这一点。

我希望看到的输出是"Your friends are Name1, Name2, Name3, and Name4.

我现在看到的是"Your friends are Name3“,因为它在每次查找时都会替换@Name (反过来是@NameList),而不是添加它。

编辑:更新了代码,这是朝着正确方向迈出的一步。我遇到的最后一个问题是弄清楚如何处理“and Name#”部分。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-06 02:56:48

代码语言:javascript
复制
%%[

Set @bodyText = "Your friends are PLACEHOLDERFRIENDNAMES."

FOR @y = 1 TO @friendRowcount DO 
    Set @friendRow = Row(@friendRows,@y)
    Set @friendName = Lookup("DB_FriendIDToName","friend_name","friendid",FIELD(@FriendRow,"friendid"),"language",Lowercase(@lookupLang))    

    IF (@y == 1) THEN
        Set @NameList = @friendName
    ELSEIF (@y < @friendRowcount) THEN
        Set @NameList = CONCAT(@NameList,", ",@friendName)
    ELSEIF (@y == @friendRowcount) THEN
        Set @NameList = CONCAT(@NameList, ", and ", @friendName)
    ENDIF 

NEXT @y
Set @bodyText = Replace(@bodyText,"PLACEHOLDERFRIENDNAMES", @NameList)

]%%

%%=v(@bodyText)=%%

修复了中间部分。谢谢你的帮助!包括可怕的牛津逗号,表示那些可能出现并造成混乱的情况。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25691654

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档