Foxtable(狐表)用户栏目专家坐堂 → 列内容提取数值


  共有3993人关注过本帖树形打印复制链接

主题:列内容提取数值

美女呀,离线,留言给我吧!
ganlan
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:194 积分:1280 威望:0 精华:0 注册:2021/4/17 10:35:00
列内容提取数值  发帖心情 Post By:2021/7/14 22:09:00 [只看该作者]

例如列的内容如下:
337、10月2日 李四(13500000000)成人1张
338、10月2日 李四(13500000000)儿童2张
想在成人数量(A列)填入1,儿童数量(B列)填入2
名字填入李四(C列),联系电话(D列)填入13500000000
能用表达式做到吗
[此贴子已经被作者于2021/7/17 10:44:29编辑过]

 回到顶部
美女呀,离线,留言给我吧!
ganlan
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:194 积分:1280 威望:0 精华:0 注册:2021/4/17 10:35:00
  发帖心情 Post By:2021/7/15 0:01:00 [只看该作者]

If e.DataCol.Name = "内容" AndAlso e.DataRow.isnull("内容") = False AndAlso e.DataRow("内容").Contains ("(") = True Then 
Dim ar() As String = e.DataRow("内容").split("(")
Dim ac() As String =  ar(0).split("日")
If ac.length > 1 Then e.DataRow("名字") = ac(1).Trim()
End If
我用这个代码,好像判断是否含"("没起作用,即使不含"(",也一样提取了

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111393 积分:567029 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/7/15 8:51:00 [只看该作者]

应该是中文的括号,不是英文括号,看看:http://www.foxtable.com/webhelp/topics/1273.htm

 回到顶部
美女呀,离线,留言给我吧!
ganlan
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:194 积分:1280 威望:0 精华:0 注册:2021/4/17 10:35:00
  发帖心情 Post By:2021/7/15 15:04:00 [只看该作者]

知道原因了,前面如果有内容了,不包含(的时候代码不会变
所有需要加个else
If e.DataCol.Name = "内容" And e.DataRow("内容").Contains ("(") = True AndAlso e.DataRow.isnull("内容") = False Then 
Dim ar() As String = e.DataRow("内容").split("(")
Dim ac() As String =  ar(0).split("日")
If ac.length > 1 Then e.DataRow("名字") = ac(1).Trim()
Else
If e.DataCol.Name = "内容" And e.DataRow("内容").Contains ("(") = False Then 
e.DataRow("名字") = Nothing
End If
End If

 回到顶部
美女呀,离线,留言给我吧!
ganlan
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:194 积分:1280 威望:0 精华:0 注册:2021/4/17 10:35:00
  发帖心情 Post By:2021/7/15 15:57:00 [只看该作者]

但是提取张数的哪里弄不了,一直提示出错,是不是提取出的不是数值是文本吗

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111393 积分:567029 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/7/15 16:16:00 [只看该作者]

字符串提取的内容肯定也是字符串,可以做一下转换:http://www.foxtable.com/webhelp/topics/1513.htm

 回到顶部
美女呀,离线,留言给我吧!
ganlan
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:194 积分:1280 威望:0 精华:0 注册:2021/4/17 10:35:00
  发帖心情 Post By:2021/7/15 21:39:00 [只看该作者]

If e.DataCol.Name = "内容" And e.DataRow("内容").Contains ("张") = True AndAlso e.DataRow.isnull("内容") = False Then 
Dim cr1() As String = e.DataRow("内容").split("成人")
Dim cr2() As String =  cr1(0).split("张")
If cr2.length > 1 Then e.DataRow("成人") = CDbl(cr2(1))
Else
If e.DataCol.Name = "内容" And e.DataRow("内容").Contains ("张") = False Then 
e.DataRow("成人") = Nothing
End If
End If

用这个代码,重置列后提示出错Exception has been thrown by the target of an invocation.

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111393 积分:567029 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/7/15 21:51:00 [只看该作者]

首先split只能使用单个字符

其次建议取成人门piao和张之间的字符,学学IndexOfSubString的用法:http://www.foxtable.com/webhelp/topics/1338.htm

 回到顶部
美女呀,离线,留言给我吧!
ganlan
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:194 积分:1280 威望:0 精华:0 注册:2021/4/17 10:35:00
  发帖心情 Post By:2021/7/17 10:45:00 [只看该作者]

应该是字符转换不对,看了例子,红色字那样转换对吗?
If e.DataCol.Name = "内容" And e.DataRow("内容").Contains ("张") = True AndAlso e.DataRow.isnull("内容") = False Then 
Dim cr1() As String = e.DataRow("内容").split("人")
Dim cr2() As String =  cr1(0).split("张")
If cr2.length > 1 Then e.DataRow("成人") = CDbl(cr2(1))
Else
If e.DataCol.Name = "内容" And e.DataRow("内容").Contains ("张") = False Then 
e.DataRow("成人") = Nothing
End If
End If
[此贴子已经被作者于2021/7/17 10:45:43编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111393 积分:567029 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/7/17 11:08:00 [只看该作者]

如果cr2(1)是数字,肯定没有问题

If cr2.length > 1 Then 
msgbox(cr2(1))
e.DataRow("成人") = CDbl(cr2(1))
else
……


 回到顶部