将串联文本转换为 table 中的列

Converting concatenated text to columns in a table

所以,我继承了这个 PowerApp 的野兽,它做一些相对简单的事情,收集对在应用程序中创建的动态测验的响应。操作员创建问题(将项目添加到 SPO 列表),然后将测验发送给随后在 PowerApp 中回答的人。

因为这些问题或多或少是一时兴起创建的,而且 PowerApps 无法动态创建新数据源或操作它使用的数据源,而不是为每个 question/answer 对创建一个列,这些 QnA 对被连接成一个巨大的纯文本块,并被推入单独的 SPO 列表中的一个列中,以以下格式保存响应:

Question: Question1 Text? Answer: Answer1 Text | Question: Question2 Text? Answer: Answer2 Text, etc., etc.

我已经弄清楚了我需要将块拆分为 QnA 对的正则表达式(在条形字符上拆分),然后每个 QnA 对本质上是一个二维数组(在 JavaScript 中,无论如何,我会在正则表达式 /((\?|\.)( Answer: ))/ 上进行拆分,因为问题当然可以以句号或问号结束)。

由于 PowerApps 的功能引擎是奇异而复杂的,我不太明白的是如何使用该正则表达式将该 blob 转换为 table 我可以输出到应用程序中以便我的操作员可以将数据提取到更有用的东西中。

编辑 1:

越来越近了。使用以下函数我可以获得二维集合:

ClearCollect(
    QnAPairs,
    ForAll(
        'ResponsesList',
        Split(
           'ResponsesList'[@Answers],
           "|"
        )
    )
);

仍然不知道如何处理 QnA 集合中的每个结果,例如 key/value 对我可以添加到新的 table.

TL;DR?

怎么转

Name            | Date     | Answers
Person McPerson | mm/dd/yy | Question: Question1 Text? Answer: Answer1 Text | Question: Question2 Text? Answer: Answer2 Text, etc., etc.

进入

Name            | Date     | Question1 Text | Question2 Text | ...QuestionN Text
Person McPerson | mm/dd/yy | Answer1 Text   | Answer2 Text   | ...Answer2 Text

如果您想向操作员显示 questions/answers(例如,在图库中),那么您需要一个包含 问题的结构的列,所以你的结构会有点像这样:

Name            | Date       | QuestionsAndAnswers
Person McPerson | mm/dd/yyyy | <table>

其中 <table> 将单独的问题和答案作为行。您可以使用如下表达式创建新结构:

    ClearCollect(
        QnAPairs,
        DropColumns(
            AddColumns(
                ResponsesList,
                "QuestionsAndAnswers",
                MatchAll(Answers, "Question:\s?(?<question>[^\?]+)\?\s?Answer\s?:\s?(?<answer>[^|]+)")),
            "Answers"))

因此,在您的应用程序中,如果您有一个图库列出了所有将项目 属性 设置为 QnAPairs 的受访者,则您可以使用第二个图库将项目 属性 设置为 Gallery1.Selected.QuestionsAndAnswers,它会显示 selected 人的问答。

请注意,您不需要单独的集合;如果将第一个图库的项目 属性 设置为原始数据源 (ResponseList),则可以将第二个图库的项目 属性 设置为

MatchAll(
    Gallery1.Selected.Answers,
    "Question:\s?(?<question>[^\?]+)\?\s?Answer\s?:\s?(?<answer>[^|]+)")

它会显示 selected 人的答案。

您可以在 https://carlosfigueirapastorage.blob.core.windows.net/public/Whosebug63425784.msapp. To open it, save it locally, then go to https://create.powerapps.com、select 打开、浏览并找到您保存的文件中找到显示此策略的应用程序。