Alan Tsai 的學習筆記


學而不思則罔,思而不學則殆,不思不學則“網貸” 為現任微軟最有價值專家 (MVP)、微軟認證講師 (MCT) 、Blogger、Youtuber:記錄軟體開發的點點滴滴 著重於微軟技術、C#、ASP .NET、Azure、DevOps、Docker、AI、Chatbot、Data Science

[開發工具小技巧]NimbleText - 資料處理產生符合特定結構的好用小工具

image
圖片來源:https://pixabay.com/en/confused-muddled-illogical-880735/ 和 https://blog.xebialabs.com/2016/03/21/essential-devops-terms/

標題可能有點看不懂,因為不太確定怎麼下比較符合這個工具的主要作用。不過給一個情境應該就能夠比較了解。

有時候需要匯入資料的時候,可能會收到一個email清單,這個email清單需要匯入到DB裡面,如果是產生出匯入的sql語法請問會怎麼做呢?

如果這個email清單只有10筆,手刻sql語法問題還不大,但是如果有1000筆email呢?

在換個和程式開發比較相關的情境,假設SA開了一個清單告訴你這個class所需要的Property有什麼,請問如何快速的產生出這個property呢?

在這篇將會介紹,如何用NimbleText這個工具快速做到上面兩個情境的需求。

NimbleText介紹

NimbleText小檔案

NimbleText這個工具作者給他的描述是:Manipulate text and data with light-weight patterns

簡單來說,就是把清單資料依照自己定義的範本去產生出內容。

聽起來還是有點抽象,不過等一下有範例的時候就會比較清楚。

版本的差異

NimbleText有3個版本:

  1. Live - 線上版
  2. Desktop - 應用程式版
  3. Desktop + License - 應用程式版加買license

這個工具非常佛心,基本上Live和Desktop都是免費,只有進階功能才需要License。以我目前使用來說,其實Live就很夠用了。

image
功能版本差異 - 此圖沒有列出全部,詳細請看:http://nimbletext.com/Home/Professional

使用介紹

這邊會介紹Live的版本。

整個畫面有3個部分:

  1. For each row in the list: 每一筆要被處理的資料
  2. Subsitute using this pattern:範本的內容
  3. Result:最後產生的結果
image
3個基本功能的畫面

在「結果」的右邊部分,能夠設定每一筆資料的:

  1. column separator: 切割字
  2. row separtor: 斷行字
  3. insert: 預存的範本
image
切割及斷行字

最簡單的使用方式就是:

  1. 把要處理的資料丟到For each row in the list
  2. Subsitute using this pattern調整結果的範本。可以使用 $0代表第一個切割欄位,以此類推
  3. Result把最後結果複製出來

使用情境1 - 依照清單產生出insert sql語法

這個情景是,有一個清單是insert的一部分值,例如要把每一個email都產生出一個insert sql語法。

假設,拿到的清單如下:

test@test.com
bbb@test.com
ccc@test.com

最後要匯入的sql語法是要到EpaperSubscribetable裡面的email欄位:

INSERT INTO EpaperSubscribe (email)
VALUES ('$0');

最後就可以把Result複製出來在SSMS執行。

image
最後結果截圖

使用情境2 - 產生出class的property

假設SA開好class裡面所有的property名稱及形態,怎麼快速產生這些property?

假設得到的property類型和名稱清單如下:

int Id
string Name
DateTime CREATEDATE

要產生的property為public包含get及set的版本,範本會是:

public $0  <% $1.toPascalCase() %> { get; set;}
            
這邊注意到,最後一個欄位名稱是全部大寫,不過透過NimbleText的功能可以建立出符合C#命名規則的Property名稱。
如果說要建立出包含private variable的property,可以從範本裡面選做參考。
上面那個範例要能夠成功,記得column separator要改成空白

最後產生的結果就直接貼到C#的class裡面。

image
產生的最後結果

結語

如果沒有NimbleText要達到上面的功能,一般會使用類似RegEx搭配產生,但是實際上並不好寫。

透過使用NimbleText讓整個的操作上變得非常的簡單,並且透過把這些pattern記錄下來隨時都可以讓一樣資料結構產生出需要的結果。

如果有更好的工具及做法也歡迎大家留言給我。


如果文章對您有幫助,就請我喝杯飲料吧
街口支付QR Code
街口支付QR Code
台灣 Pay QR Code
台灣 Pay QR Code
Line Pay 一卡通 QR Code
Line Pay 一卡通 QR Code
街口支付QR Code
支付寶QR Code
街口支付QR Code
微信支付QR Code
comments powered by Disqus