Foxtable(狐表)用户栏目专家坐堂 → 关于混合字符数值的计算问题


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

主题:关于混合字符数值的计算问题

帅哥哟,离线,有人找我吗?
bootes29
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:214 积分:1386 威望:0 精华:0 注册:2017/5/13 15:13:00
关于混合字符数值的计算问题  发帖心情 Post By:2017/6/28 9:43:00 [显示全部帖子]

各位老师早上好,
上次有个问题,就是混合字符串 成人3070,儿童3170,房差1570,每个-10元,转到另外一个表,
老师给了非常好的回答。
Dim dtb As DataTable = DataTables("表e")
Dim dtc As DataTable = DataTables("表k")
Dim ns As new List(of String)
ns.AddRange(new String() {"成人
图片点击可在新窗口打开查看此主题相关图片如下:换算.jpg
图片点击可在新窗口打开查看
","儿童","单房差"})
For Each dr As DataRow In dtb.DataRows
    Dim str As String = dr("价格")
    Dim arr() As String = str.Split(",")
    Dim n As String
    Dim p As Double
    str = ""
    For Each Ar As String In arr
        For Each n1 As String In ns
            If ar.Contains(n1) Then
                n = n1
                Exit For
            End If
        Next
        p = val(ar.Replace(n,"")) - 10
        str &= n & p & ","
    Next
    Dim ndr As DataRow = dtc.AddNew
    ndr("价格")=str
Next

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


加好友 发短信
等级:童狐 帖子:214 积分:1386 威望:0 精华:0 注册:2017/5/13 15:13:00
  发帖心情 Post By:2017/6/28 9:45:00 [显示全部帖子]

现在“价格”里面要改的变成了,“1-10号” “11-31号”
我试着是这样做的
ns.AddRange(new String() {"1-11号","儿童","单房差"})
For Each dr As DataRow In dtb.DataRows



这样就会报错,说是值不能为空,这是为何,各位老师?

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


加好友 发短信
等级:童狐 帖子:214 积分:1386 威望:0 精华:0 注册:2017/5/13 15:13:00
  发帖心情 Post By:2017/6/28 9:48:00 [显示全部帖子]

ns.AddRange(new String() {"号","儿童","单房差"})
我改成这样,同样的错误

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


加好友 发短信
等级:童狐 帖子:214 积分:1386 威望:0 精华:0 注册:2017/5/13 15:13:00
  发帖心情 Post By:2017/6/28 10:43:00 [显示全部帖子]

有的色 老师  请百忙之中指点下迷津!

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


加好友 发短信
等级:童狐 帖子:214 积分:1386 威望:0 精华:0 注册:2017/5/13 15:13:00
  发帖心情 Post By:2017/6/28 13:06:00 [显示全部帖子]

刚回来,感谢老师的指导。
实际上我想 让有价格的地方 减10,其他文字仍然保留
目前代码存在两个问题
1、感觉表格数据转换上有点问题,如图。
2、保留其他备注文字

这是我的代码:
Dim dtb As DataTable = DataTables("表e")
Dim dtc As DataTable = DataTables("表k")
Dim ns As new List(of String)
ns.AddRange(new String() {"儿童","单房差","1-10号","11-30号","1-13号"})
For Each dr As DataRow In dtb.DataRows
Dim str As String = dr("价格")
Dim arr() As String = str.Split(",")
Dim n As String
Dim p As Double
str = ""
For Each Ar As String In arr
    For Each n1 As String In ns
        If ar.Contains(n1) Then
            n = n1
            Exit For
        End If
    Next
    If n > "" Then
        p = val(ar.Replace(n,"")) - 10
        str &= n & p & ","
    Else
        str &= ar & ","
    End If
Next
'msgbox(str.trim(","))
Dim ndr As DataRow = dtc.AddNew
'ndr("价格")=str.trim(",")
ndr("价格")=str
Next

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


加好友 发短信
等级:童狐 帖子:214 积分:1386 威望:0 精华:0 注册:2017/5/13 15:13:00
  发帖心情 Post By:2017/6/28 13:07:00 [显示全部帖子]

从这张图来看,有些乱码的感觉,右边有原来的数据,左边是代码 转来的

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


加好友 发短信
等级:童狐 帖子:214 积分:1386 威望:0 精华:0 注册:2017/5/13 15:13:00
  发帖心情 Post By:2017/6/28 13:07:00 [显示全部帖子]


图片点击可在新窗口打开查看此主题相关图片如下:未标题-3 拷贝.jpg
图片点击可在新窗口打开查看

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


加好友 发短信
等级:童狐 帖子:214 积分:1386 威望:0 精华:0 注册:2017/5/13 15:13:00
  发帖心情 Post By:2017/6/28 16:39:00 [显示全部帖子]

首先,感谢两位老师亲临指点,
有点色老师,这段代码可以用,符合我的要求。
有点蓝老师的话也很有道理
他们原始的记录方法是杂乱无章的,我还是要从根源上把他解决了。
应该是从输入上标准化先。
----------------------

 回到顶部