Alan Tsai 的學習筆記


學而不思則罔,思而不學則殆,不思不學則“網貸” 記錄軟體開發的點點滴滴 著重於微軟技術、網頁開發、DevOps、C#, Asp .net Mvc、Azure、AI、Chatbot、Docker、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記錄下來隨時都可以讓一樣資料結構產生出需要的結果。

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

comments powered by Disqus