yohoboy 发表于 2022-12-28 00:06:24

正則日期換算(已解決)

本帖最后由 yohoboy 于 2022-12-29 00:05 编辑

因SQLite 不支援 yyyy/m/d 日期格式,只支援 yyyy-mm-dd 因此參考論壇之前的文章寫出以下代碼

$File_Read_Temp = '2022/2/4,08:41:30,4665782,-40,99.9,5,422.7375,60,4,16,-84,O9'
$File_Read_Temp = StringRegExpReplace($File_Read_Temp, '(\d+)/(\d+)/(\d+)', '$1-$2-$3')
$File_Read_Temp = StringRegExpReplace($File_Read_Temp,'-(\d)(?=\D|$)', '-0\1')
MsgBox(0,"",$File_Read_Temp)

得到的結果就符合所需
2022-02-04,08:41:30,4665782,-40,99.9,5,422.7375,60,4,16,-84,O9

但是因需要跑兩個指令做換算,因此想請問是否能正則替換 yyyy/m/d 改為 yyyy-mm-dd 等日期格式,
可以一段指令就可以跑完,謝謝各位大老的協助。

holley 发表于 2022-12-28 09:31:00

为啥我只用第一条正则就得到你要的结果了?

afan 发表于 2022-12-28 14:34:07

本帖最后由 afan 于 2022-12-28 14:35 编辑

holley 发表于 2022-12-28 09:31
为啥我只用第一条正则就得到你要的结果了?
2-4 没有补零 02-04

这种不管什么方法,至少要两次处理。用正则单次处理肯定不可能

haijie1223 发表于 2022-12-28 22:20:12


加一行代码又能咋滴
Local $File_Read_Temp = '2022/2/4,08:41:30,4665782,-40,99.9,5,422.7375,60,4,16,-84,O9'
Local $aDate = StringRegExp($File_Read_Temp, '(\d+)/(\d+)/(\d+)', 3)
If UBound($aDate) = 3 Then $File_Read_Temp = StringRegExpReplace($File_Read_Temp, '(\d+)/(\d+)/(\d+)', StringFormat("%04d-%02d-%02d", $aDate, $aDate, $aDate))
MsgBox(0, "", $File_Read_Temp)

lixiaolong 发表于 2022-12-28 23:39:01



$File_Read_Temp = '2022/2/14,08:41:30,4665782,-40,99.9,5,422.7375,60,4,16,-84,O9'
$File_Read_Temp = StringRegExpReplace(StringReplace($File_Read_Temp, '/', '-'), '(?<=\d-)(\d)(?!\d)', '0\1')
MsgBox(0,"",$File_Read_Temp)



yohoboy 发表于 2022-12-29 00:03:48

本帖最后由 yohoboy 于 2022-12-29 00:59 编辑



1. 回覆樓上
$File_Read_Temp = '2022/2/14,08:41:30,4665782,-40,99.9,5,422.7375,1/60,4,16,-84,O9' ;如果後面的資料有 "/"時, 例 1/60
$File_Read_Temp = StringRegExpReplace(StringReplace($File_Read_Temp, '/', '-'), '(?<=\d-)(\d)(?!\d)', '0\1');將造成後面資料的 "/" 變成了 "-" ,不符所需,只需要針對日期處理,後面資料不更動
MsgBox(0,"",$File_Read_Temp)


2.總結

雖然cpu 效能很強,很快就轉換完成,但是要換算的筆數一多(萬行以上),多一行代碼就要多等待一段換算時間,能減少換算時間也能早點休息,不過感謝各大老的回覆,本問題就改為已解決,謝謝。
页: [1]
查看完整版本: 正則日期換算(已解決)