Office 中的問題,PowerShell 解決。也學到一些Regular Expression(正則表達式)的運用:
$inputfile = "test.csv"
(Get-Content
$inputfile
) | Foreach-Object {$_ -replace "([0-9]{1,2})/([0-9]
)/([0-9]
{1,2}
)", '$2/$1/$3'} | Set-Content '_output.txt'
{4}
部份 Regular Expression 的解釋:
字元/符號 | 範例 | 說明 | 成立例子 | |
一般字元 | / | 含字母 “/” 的字串 | 25/12 | |
^ | ^A | 比對字串開始位置 | AB | |
$ | C$ | 比對字串結束位置 | ABC | |
\ | e\^2 | 避開特殊字元 | e^2 | |
[......] | B[aeiou]t | 比對 [......] 內的任意字元 | Bit Bot |
|
[0-9] | [0-9] | 比對0到9的任意字元,另有[a-z]和[A-Z]等用法 | 9 | |
{n} | B{2} | 比對{n}前的字元n次,n必為正整數 | BB | |
{n,m} | [0-9]{2,4} | 比對{n,m}前的字元至少n次但最多m次,n,m均為正整數 | 01 2389 |
|
(x) | ([0-9]+)/([0-9]+) | 比對 x 並將符合的部分存入一個變數 | 可比對 “123/45” 中的 “123” 、 “45”, 並將這個比對得到的字串設定至變數 \$1 和 \$2 | |
加入給使用者的簡介部份:
$rePattern = '([0-9]{1,2})/([0-9]{1,2})/([0-9]{4})'
Write-Host "This will do date-format conversion for your AA/BB/CCCC into BB/AA/CCCC,"
Write-Host "Output as '_converted.txt'. Enjoy."
Write-Host ""
$fileRaw = Read-Host -Prompt 'Input your filename (same folder, ever with file extension): '
(Get-Content $fileRaw) | Foreach-Object {$_ -replace $rePattern, '$2/$1/$3'} | Set-Content '_convert.txt'
對這類辦公室日常出現的問題,有時太重技術層面去應對了就算的話,也明白就像是諸侯舞庶人之劍的感覺。 而且,這個日期格式的問題本來已有專案去處理和做了改變,好處是應該可以更完善的解決問題。但世上總有意外或突然的需要,再啟動一個項目的形式,過程往往會快費較長時間,而小修小補就是quick-and-dirty。
再者,參考使用者自己也會用的方法,就好像社區提案的概念,這些方案可能更切合用家的需要。如果能讓人人都有能力和空餘可以做些小創新、小改變,應該對人對己都是好處吧。