DataWeave: csv to ascii table



使用以下csv输入:

Name,Nick
Sébastien,peudo1
Alex,peudo2
Max,Mule

我想要以下输出(纯文本格式(:

| Sébastien  | peudo1  |
| Alex       | peudo2  |
| Max        | Mule    |

最大的挑战是使输出列的大小固定,并将大小调整为最大的字符串。

正如@jorge gracia所说,最好的方法是使用csv并四处破解,以获得上一个和最后一个|,那么我所做的就是计算字段的最大大小,并使用rightPad函数

%dw 2.0
output application/csv separator="|"
import * from dw::core::Strings
fun biggestLength(data: Array<{_: String}>) = 
data flatMap ((item, index) -> 
item pluck ((value, key, index) -> sizeOf(value))
)
maxBy ((item) -> item)       
var padding = biggestLength(payload)          
---
payload map ((item) -> 
{
"": "",
(
item mapObject ((value, key, index) -> 
{
(rightPad(key, padding)): rightPad(value, padding)
}
)
),
"": ""
}
)

我提出了以下代码。也许它可以改进:

%dw 2.0
output text/plain
var array = (payload map [ $.Name, $.Nick ])
var nameSize = max( payload map sizeOf($.Name))
var nickSize = max( payload map sizeOf($.Nick))
---    
payload map (
"| "  ++ $.Name ++ ((0 to (nameSize-sizeOf($.Name))) map " " joinBy  "") ++ 
" | " ++ $.Nick ++ ((0 to (nickSize-sizeOf($.Nick))) map " " joinBy  "") ++  
" |"
)
joinBy  'n'

最新更新