Sys.
setlocale ( category
= "LC_ALL" , locale
= "cht" ) # for windows user library( magrittr)
library( data.table )
library( zoo)
con <- file( "date.txt" , "r" , blocking = FALSE)
d <-
readLines( con, encoding = "UTF-8" ) %>% # 讀入文字檔
trimws %>% # 除去前後空白
gsub( " +" , " " , .) %>% # 除去多餘空白
as.data .table %>%
setnames( "." , "rawTxt" ) %>%
.[ - 1 :- 3 ] # 刪除前三列
close( con)
rowIDs1 <- grep( "^標 準 別:" , d$rawTxt) # 找到「標準別」列
rowIDs2 <- which( ! ( 1 : nrow( d) ) % in% rowIDs1) # 找到非「標準別」列
# 捉取並寫入「標準別」列的「標準別」欄
d[ rowIDs1, 標準別 := gsub( "標 準 別:" , "" , rawTxt) ]
# 由上一個非NA值填入標準別
d[ , 標準別 := na.locf ( 標準別) ]
# 捉取並寫入非「標準別」列各欄
d[ rowIDs2, 處置代碼 := tstrsplit( rawTxt, " " , keep = 1 ) ]
d[ rowIDs2, 處置名稱 := tstrsplit( rawTxt, " " , keep = 2 ) ]
d[ rowIDs2, 處置類別 := tstrsplit( rawTxt, " " , keep = 3 ) ]
d[ rowIDs2, 健保單價 := tstrsplit( rawTxt, " " , keep = 4 ) ]
d[ rowIDs2, 自費單價 := tstrsplit( rawTxt, " " , keep = 5 ) ]
# 刪除「標準別」列
d <- d[ rowIDs2]
# 刪除rawTxt
d[ , rawTxt := NULL]
# 完工
print( d)
# 標準別 處置代碼 處置名稱 處置類別 健保單價 自費單價
# 1: 030 診察費 10101A 門診診察費 F11 80.00 80.00
# 2: 030 診察費 TR-IN 急診轉入醫院獎勵 F 500.00 500.00
# 3: 030 診察費 TR-OUT 急診轉出醫院獎勵 F 500.00 500.00
# 4: 030 診察費 10201B 急診診察費-檢傷分類第一級 F14 1800.00 1800.00
# 5: 030 診察費 10202B 急診診察費-檢傷分類第二級 F14 1000.00 1000.00
# ---
# 117: 240 一般檢查費 E3031C BI:SGPT(替代療法) D01 50.00 50.00
# 118: 240 一般檢查費 E3032C BI:r-GT(替代療法) D01 70.00 70.00
# 119: 240 一般檢查費 E3034C 愛滋病毒篩檢暨衛教諮詢費 D01 225.00 225.00
# 120: 240 一般檢查費 E3034C-1 愛滋病毒篩檢費-自付差額(複診) D01 15.00 15.00
# 121: 240 一般檢查費 E3037C C型肝炎病毒抗體檢驗暨諮詢費 D01 350.00 350.00
# 轉存CSV檔
d %>% as.data .frame %>% write.csv ( ., "dateNew2.csv" , fileEncoding = "UTF-8" )
U3lzLnNldGxvY2FsZShjYXRlZ29yeSA9ICJMQ19BTEwiLCBsb2NhbGUgPSAiY2h0IikgIyBmb3Igd2luZG93cyB1c2VyCmxpYnJhcnkobWFncml0dHIpCmxpYnJhcnkoZGF0YS50YWJsZSkKbGlicmFyeSh6b28pCgpjb24gPC0gZmlsZSgiZGF0ZS50eHQiLCAiciIsIGJsb2NraW5nID0gRkFMU0UpCmQgPC0gCiAgcmVhZExpbmVzKGNvbiwgZW5jb2RpbmcgPSAiVVRGLTgiKSAlPiUgIyDoroDlhaXmloflrZfmqpQKICB0cmltd3MgJT4lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIOmZpOWOu+WJjeW+jOepuueZvQogIGdzdWIoIiArIiwgIiAiLCAuKSAlPiUgICAgICAgICAgICAgICAgICMg6Zmk5Y675aSa6aSY56m655m9CiAgYXMuZGF0YS50YWJsZSAlPiUKICBzZXRuYW1lcygiLiIsICJyYXdUeHQiKSAlPiUKICAuWy0xOi0zXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIOWIqumZpOWJjeS4ieWIlwpjbG9zZShjb24pCgpyb3dJRHMxIDwtIGdyZXAoIl7mqJkg5rqWIOWIpe+8miIsIGQkcmF3VHh0KSAgICAjIOaJvuWIsOOAjOaomea6luWIpeOAjeWIlwpyb3dJRHMyIDwtIHdoaWNoKCEoMTpucm93KGQpKSAlaW4lIHJvd0lEczEpICMg5om+5Yiw6Z2e44CM5qiZ5rqW5Yil44CN5YiXCgojIOaNieWPluS4puWvq+WFpeOAjOaomea6luWIpeOAjeWIl+eahOOAjOaomea6luWIpeOAjeashApkW3Jvd0lEczEsIOaomea6luWIpSA6PSBnc3ViKCLmqJkg5rqWIOWIpe+8miIsICIiLCByYXdUeHQpXQojIOeUseS4iuS4gOWAi+mdnk5B5YC85aGr5YWl5qiZ5rqW5YilCmRbLCDmqJnmupbliKUgOj0gbmEubG9jZijmqJnmupbliKUpXQoKIyDmjYnlj5bkuKblr6vlhaXpnZ7jgIzmqJnmupbliKXjgI3liJflkITmrIQKZFtyb3dJRHMyLCDomZXnva7ku6PnorwgOj0gdHN0cnNwbGl0KHJhd1R4dCwgIiAiLCBrZWVwID0gMSldCmRbcm93SURzMiwg6JmV572u5ZCN56ixIDo9IHRzdHJzcGxpdChyYXdUeHQsICIgIiwga2VlcCA9IDIpXQpkW3Jvd0lEczIsIOiZlee9rumhnuWIpSA6PSB0c3Ryc3BsaXQocmF3VHh0LCAiICIsIGtlZXAgPSAzKV0KZFtyb3dJRHMyLCDlgaXkv53llq7lg7kgOj0gdHN0cnNwbGl0KHJhd1R4dCwgIiAiLCBrZWVwID0gNCldCmRbcm93SURzMiwg6Ieq6LK75Zau5YO5IDo9IHRzdHJzcGxpdChyYXdUeHQsICIgIiwga2VlcCA9IDUpXQoKIyDliKrpmaTjgIzmqJnmupbliKXjgI3liJcKZCA8LSBkW3Jvd0lEczJdCiMg5Yiq6ZmkcmF3VHh0CmRbLCByYXdUeHQgOj0gTlVMTF0KIyDlrozlt6UKcHJpbnQoZCkKIyAgICAgICAgICAgICAg5qiZ5rqW5YilIOiZlee9ruS7o+eivCAgICAgICAgICAgICAgICAgICAgICDomZXnva7lkI3nqLEg6JmV572u6aGe5YilIOWBpeS/neWWruWDuSDoh6rosrvllq7lg7kKIyAgIDE6ICAgICAwMzAg6Ki65a+f6LK7ICAgMTAxMDFBICAgICAgICAgICAgICAgICAgICDploDoqLroqLrlr5/osrsgICAgICBGMTEgICAgODAuMDAgICAgODAuMDAKIyAgIDI6ICAgICAwMzAg6Ki65a+f6LK7ICAgIFRSLUlOICAgICAgICAgICAgICDmgKXoqLrovYnlhaXphqvpmaLnjY7li7UgICAgICAgIEYgICA1MDAuMDAgICA1MDAuMDAKIyAgIDM6ICAgICAwMzAg6Ki65a+f6LK7ICAgVFItT1VUICAgICAgICAgICAgICDmgKXoqLrovYnlh7rphqvpmaLnjY7li7UgICAgICAgIEYgICA1MDAuMDAgICA1MDAuMDAKIyAgIDQ6ICAgICAwMzAg6Ki65a+f6LK7ICAgMTAyMDFCICAgICDmgKXoqLroqLrlr5/osrst5qqi5YK35YiG6aGe56ys5LiA57SaICAgICAgRjE0ICAxODAwLjAwICAxODAwLjAwCiMgICA1OiAgICAgMDMwIOiouuWvn+iyuyAgIDEwMjAyQiAgICAg5oCl6Ki66Ki65a+f6LK7LeaqouWCt+WIhumhnuesrOS6jOe0miAgICAgIEYxNCAgMTAwMC4wMCAgMTAwMC4wMAojICAtLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKIyAxMTc6IDI0MCDkuIDoiKzmqqLmn6XosrsgICBFMzAzMUMgICAgICAgICAgICAgQkk6U0dQVCjmm7/ku6PnmYLms5UpICAgICAgRDAxICAgIDUwLjAwICAgIDUwLjAwCiMgMTE4OiAyNDAg5LiA6Iis5qqi5p+l6LK7ICAgRTMwMzJDICAgICAgICAgICAgIEJJOnItR1Qo5pu/5Luj55mC5rOVKSAgICAgIEQwMSAgICA3MC4wMCAgICA3MC4wMAojIDExOTogMjQwIOS4gOiIrOaqouafpeiyuyAgIEUzMDM0QyAgICAgIOaEm+a7i+eXheavkuevqeaqouaaqOihm+aVmeirruipouiyuyAgICAgIEQwMSAgIDIyNS4wMCAgIDIyNS4wMAojIDEyMDogMjQwIOS4gOiIrOaqouafpeiyuyBFMzAzNEMtMSDmhJvmu4vnl4Xmr5Lnr6nmqqLosrst6Ieq5LuY5beu6aGNKOikh+iouikgICAgICBEMDEgICAgMTUuMDAgICAgMTUuMDAKIyAxMjE6IDI0MCDkuIDoiKzmqqLmn6XosrsgICBFMzAzN0MgICBD5Z6L6IKd54KO55eF5q+S5oqX6auU5qqi6amX5pqo6Kuu6Kmi6LK7ICAgICAgRDAxICAgMzUwLjAwICAgMzUwLjAwCgojIOi9ieWtmENTVuaqlApkICU+JSBhcy5kYXRhLmZyYW1lICU+JSB3cml0ZS5jc3YoLiwgImRhdGVOZXcyLmNzdiIsIGZpbGVFbmNvZGluZyA9ICJVVEYtOCIpCg==