我有一個使用 2 Compose 的邏輯應用程式,第一個跳過第一行
take(skip(variables('CSV Data'),1),sub(length(variables('CSV Data')),1))
第二個跳過最后一行
take(outputs('Skip_Header'),sub(length(outputs('Skip_Header')),1))
當我手動初始化 CSV 資料時,這非常有用,下面是我的作業邏輯應用程式定義:
{
"definition": {
"$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
"actions": {
"Initialize_CSV_Data": {
"inputs": {
"variables": [
{
"name": "CSV Data",
"type": "array",
"value": [
"rubbish1,rubbish2,rubbish3",
"blank1,blank2,blank3",
"header1,header2,header3",
"data1,data2,data3",
"data4,data5,data6"
]
}
]
},
"runAfter": {},
"type": "InitializeVariable"
},
"Skip_Footer": {
"inputs": "@take(outputs('Skip_Header'),sub(length(outputs('Skip_Header')),1))",
"runAfter": {
"Skip_Header": [
"Succeeded"
]
},
"type": "Compose"
},
"Skip_Header": {
"inputs": "@take(skip(variables('CSV Data'),1),sub(length(variables('CSV Data')),1))",
"runAfter": {
"Initialize_CSV_Data": [
"Succeeded"
]
},
"type": "Compose"
}
},
"contentVersion": "1.0.0.0",
"outputs": {},
"parameters": {},
"triggers": {
"manual": {
"inputs": {},
"kind": "Http",
"type": "Request"
}
}
},
"parameters": {}
}

但是如果我將相同的資料放在 CSV 中,將其存盤在 SFTP 中,然后使用初始化 CSV Data 變數
split(body('Get_file_content'),'
')
要么
array(body('Get_file_content'))
而不是硬編碼
[
"rubbish1,rubbish2,rubbish3",
"blank1,blank2,blank3",
"header1,header2,header3",
"data1,data2,data3",
"data4,data5,data6"
]
像以前一樣。然后第一個撰寫(跳過頁眉)將回傳[] ,第二個撰寫(跳過頁腳)產生此錯誤:
InvalidTemplate. Unable to process template language expressions in action 'Skip_Footer' inputs at line '0' and column '0': 'The template language function 'take' parameters are out of range: 'count' must be a positive integer. The provided valus is '-1'. Please see https://aka.ms/logicexpressions#take for usage details.'.

uj5u.com熱心網友回復:
考慮到您提供的相同示例,我使用 3 個組合連接器來跳過第一行。這是我的邏輯應用程式

我正在使用Split To Get Rows連接器將 csv 檔案轉換為陣列。下面是里面的表達
split(body('Get_blob_content_(V2)'),'
')
上述步驟創建了一個額外的空陣列物件,以便使用下一步Rows Array連接器將其洗掉。下面是里面的表達
take(outputs('Split_To_Get_Rows'),sub(length(outputs('Split_To_Get_Rows')),1))
Going further In Skip First Number of RowsConnector 用于跳過前 3 行。這是其中的運算式
take(skip(outputs('Rows_Array'),3),sub(length(outputs('Rows_Array')),1))
這是最終結果:

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/443911.html
