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

时间:2014-09-05 18:11:08

标签: exacttarget ampscript

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

%%[

    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),而不是添加它。

编辑:更新了代码,这是朝着正确方向迈出的一步。我遇到的最后一个问题是弄清楚如何解决这个问题。和名称#"部分。

1 个答案:

答案 0 :(得分:3)

%%[

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)=%%

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