以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  提取年月日  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=157779)

--  作者:zsxx999ja
--  发布时间:2020/10/28 20:54:00
--  提取年月日
我局经常发通知,内容如下:【区教育科技体育局】会议通知:2017年6月25日(星期日)下午3:00,在区公安分局一楼大会议室,区委书记文建平主持召开广安区脱贫攻坚工作研讨会议。参会人员:各农村公办中小学校长(各片区教育督导组负责通知辖区学校)。收到请回复,谢谢!今天尚来接受督查的学校,分管领导和资料经办人在家接受督查。,这还用问中如何用正则方法,取出当中的日期并转成yyyy-mm-dd的形式?写出代码示范一直
--  作者:zsxx999ja
--  发布时间:2020/10/28 21:43:00
--  
Dim str As String = "【区教育科技体育局】会议通知:2017年6月25日(星期日)下午3:00,在区公安分局一楼大会议室,区委书记文建平主持召开广安区脱贫攻坚工作研讨会议.参会人员:各农村公办中小学校长(各片区教育督导组负责通知辖区学校).收到请回复,谢谢!"
Dim mc = System.Text.RegularExpressions.Regex.Matches(str, "\\d{4}年\\d{1,2}月\\d{1,2}日")  
msgbox(mc(0).value)

--  作者:zsxx999ja
--  发布时间:2020/10/29 14:30:00
--  
老师帮忙看一下,错在什么地方:从通知中提出日期至会议时间列,我是在datacolchanged事件中写的
If e.DataCol.Name = "SmsBody" Then \'如果更改的是身份证号码列
    If e.DataRow.IsNull("SmsBody") Then \'身份证号码是否为空
        e.DataRow("会议时间") = Nothing \'如果为空,则清除出生日期
    Else
     
        Dim str As String = e.DataRow("SmsBody")
        Dim mc As object = System.Text.RegularExpressions.Regex.Matches(str, "\\d{4}年\\d{1,2}月\\d{1,2}日")
        Dim rq As String = mc(0).value
        rq = rq.Replace("年","-").replace("月","-").replace("日","-").Trim("-")
        Dim rq2 As Date
        e.DataRow("会议时间") = rq2
    End If
End If

--  作者:zsxx999ja
--  发布时间:2020/10/29 14:39:00
--  
If e.DataCol.Name = "SmsBody" Then \'如果更改的是身份证号码列
    If e.DataRow.IsNull("SmsBody") Then \'身份证号码是否为空
        e.DataRow("会议时间") = Nothing \'如果为空,则清除出生日期
    Else
     
        Dim str As String = e.DataRow("SmsBody")
        Dim mc As object = System.Text.RegularExpressions.Regex.Matches(str, "\\d{4}年\\d{1,2}月\\d{1,2}日")
        Dim rq As String = mc(0).value
        rq = rq.Replace("年","-").replace("月","-").replace("日","-").Trim("-")
        Dim rq2 As Date = cdate(rq)           \'将rq转换为日期就正确了,单行测试没有问题,但整列重置就报错了,
        e.DataRow("会议时间") = rq2
    End If
End If

--  作者:zsxx999ja
--  发布时间:2020/10/29 14:40:00
--  
错误提示如下:
.NET Framework 版本:4.0.30319.42000
Foxtable 版本:2020.5.29.8
错误所在事件:表,手机短信20201019214642, DataColChanged
详细错误信息:
调用的目标发生了异常。
指定的参数已超出有效值的范围。
参数名: i

--  作者:有点蓝
--  发布时间:2020/10/29 14:47:00
--  
说明其中某个日期值不是有效的日期格式
--  作者:zsxx999ja
--  发布时间:2020/10/29 14:54:00
--  
如何改?


--  作者:有点蓝
--  发布时间:2020/10/29 15:08:00
--  
http://www.foxtable.com/webhelp/topics/0324.htm
--  作者:zsxx999ja
--  发布时间:2020/10/29 16:06:00
--  
If e.DataCol.Name = "SmsBody" Then \'如果更改的是身份证号码列
    If e.DataRow.IsNull("SmsBody") Then \'身份证号码是否为空
        e.DataRow("会议时间") = Nothing \'如果为空,则清除出生日期
    Else
        
        Dim str As String = e.DataRow("SmsBody")
        Dim part As String = "\\d{4}年\\d{1,2}月\\d{1,2}日"
        Dim mc As object = System.Text.RegularExpressions.Regex.Matches(str, "\\d{4}年\\d{1,2}月\\d{1,2}日")
        
        If mc.IsMatch(part,str) = True  Then             此处加个判断看匹配成功不,用法有错,如下楼请修改
            Dim rq As String = mc(0).value
            rq = rq.Replace("年","-").replace("月","-").replace("日","-").Trim("-")
            Dim rq2 As Date
            If Date.TryParse(rq, rq2) Then \'如果转换成功                                                   黄色部分已照帮助修改,但仍报错,错不在此处。
                e.DataRow("会议时间") = rq2   \' Output.Show(d) \'输出转换结果
            Else
                e.DataRow("会议时间") = Nothing  \'Output.Show("无效日期格式") \'给出错误提示
            End If
            
        End If
    End If
End If

--  作者:zsxx999ja
--  发布时间:2020/10/29 16:06:00
--  
.NET Framework 版本:4.0.30319.42000
Foxtable 版本:2020.5.29.8
错误所在事件:表,手机短信20201019214642, DataColChanged
详细错误信息:
调用的目标发生了异常。
未找到类型“MatchCollection”的公共成员“IsMatch”。