Foxtable(狐表)用户栏目专家坐堂 → 读取文本数据第一行生成临时表,并写入文本数据行到临时表,文本数据行写入项目 但是行的值不写入 有没有办法修正呢?


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

主题:读取文本数据第一行生成临时表,并写入文本数据行到临时表,文本数据行写入项目 但是行的值不写入 有没有办法修正呢?

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


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
读取文本数据第一行生成临时表,并写入文本数据行到临时表,文本数据行写入项目 但是行的值不写入 有没有办法修正呢?  发帖心情 Post By:2022/2/23 0:08:00 [只看该作者]

读取文本数据第一行生成临时表,并写入文本数据行到临时表,红色部分代码注释掉的话  文本数据行和行的值会正常写入项目,不注释掉的话 文本数据行写入项目 但是行的值不写入  有没有办法修正呢?

 

红色部分代码拟实现的是  如果文本的列值含有 时间  就新增一个  日期列 属性为date  如果含有日期  就将该列属性直接定义位date

 

当前代码如下:

Dim  dlg As  new  OpenFileDialog
dlg.Filter =  "文本文件|*.txt"
'Tables("统计").StopRedraw
If  dlg.ShowDialog =  DialogResult.OK Then
    Dim Multi As String
    Dim  strs As  String =  FileSys.ReadAllText(dlg.FileName, Encoding.Default)
    Dim Values11() As String =  strs.Replace(vbcr,"").split(vblf)
    For  i1 As  Integer =  0 To  0
        Dim  rs As  String =  Values11(0)
        For  i As  Integer =  0 To  0
            Dim  cs() As  String =  rs.Split(vbtab)
            output.Show(cs(0))
            Multi = cs(0)
        Next
    Next
   
    Dim Values() As String
    Values = Multi.split("|")
    Dim dtb As New DataTableBuilder("统计")
    For Index As Integer = 0 To Values.Length - 1
        Output.Show(Values(Index))
        If Values(Index).Contains("时间") Then
            dtb.AddDef("日期", Gettype(Date))
        End If
       
        If Values(Index).Contains("日期")   Then
            dtb.AddDef(Values(Index), Gettype(Date))
        Else
            dtb.AddDef(Values(Index), Gettype(String), 255)
        End If
    Next
    dtb.Build()
   
    'Dim s As String = FileSys.ReadAllText("d:\qqq.txt", Encoding.Default)
    'Dim Values1() As String = s.Replace(vbcr,"").split(vblf)
    For i As Integer = 1 To Values11.length - 1
        Dim cs() As String = Values11(i).split("|")
        Dim r As Row = Tables("统计").Addnew()
        'For Each c As DataCol In DataTables("统计").DataCols
        output.show(cs.Length-1)
        For i1 As Integer = 0 To math.min(cs.Length-1, Tables("统计").cols.count - 1)
            If cs.Length = Tables("统计").cols.count Then
                
                Dim bb As String=r(i1)
                If bb<>"" Then
                    Dim d As Date = cdate(bb)
                    If bb.Contains("时间") Then
                        r("日期")= Format(d, "yyyy-MM-dd")
                    Else
                        r(i1) = cs(i1)
                    End If
                End If

            End If
        Next
        'Next
    Next
   
End If
'Tables("统计").ResumeRedraw
 

 

[此贴子已经被作者于2022/2/23 1:29:25编辑过]

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


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

        For i1 As Integer = 0 To math.min(cs.Length-1, Tables("统计").cols.count - 1)
            If cs.Length = Tables("统计").cols.count Then
                
                Dim bb As String=r(i1).trim()
                If bb > "" Then
                    If bb.Contains("时间") Then

                    Dim d As Date = cdate(bb)
                        r("日期")= Format(d, "yyyy-MM-dd")

                        r(i1) = cs(i1)
                    End If
                End If

            End If
        Next


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


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(有点蓝)        For i1...  发帖心情 Post By:2022/2/23 10:21:00 [只看该作者]

Dim  dlg As  new  OpenFileDialog
dlg.Filter =  "文本文件|*.txt"
'Tables("统计").StopRedraw
If  dlg.ShowDialog =  DialogResult.OK Then
    Dim Multi As String
    Dim  strs As  String =  FileSys.ReadAllText(dlg.FileName, Encoding.Default)
    Dim Values11() As String =  strs.Replace(vbcr,"").split(vblf)
    For  i1 As  Integer =  0 To  0
        Dim  rs As  String =  Values11(0)
        For  i As  Integer =  0 To  0
            Dim  cs() As  String =  rs.Split(vbtab)
            output.Show(cs(0))
            Multi = cs(0)
        Next
    Next
   
    Dim Values() As String
    Values = Multi.split("|")
    Dim dtb As New DataTableBuilder("统计")
    For Index As Integer = 0 To Values.Length - 1
        Output.Show(Values(Index))
        If Values(Index).Contains("时间") OrElse Values(Index).Contains("日期")  Then
            dtb.AddDef("日期", Gettype(Date))
        Else
            dtb.AddDef(Values(Index), Gettype(String), 255)
        End If

    Next
    dtb.Build()
   
    'Dim s As String = FileSys.ReadAllText("d:\qqq.txt", Encoding.Default)
    'Dim Values1() As String = s.Replace(vbcr,"").split(vblf)
    For i As Integer = 1 To Values11.length - 1
        Dim cs() As String = Values11(i).split("|")
        Dim r As Row = Tables("统计").Addnew()
        'For Each c As DataCol In DataTables("统计").DataCols
        output.show(cs.Length-1)
        For i1 As Integer = 0 To math.min(cs.Length-1, Tables("统计").cols.count - 1)
            If cs.Length = Tables("统计").cols.count Then
               
                Dim bb As String=r(i1).trim()
                If bb > "" Then
                    If bb.Contains("时间") Then
                        Dim d As Date = cdate(bb)
                        r("日期")= Format(d, "yyyy-MM-dd")
                        r(i1) = cs(i1)
                    End If
                End If
               
            End If
           
        Next
        'Next
    Next
   
End If
'Tables("统计").ResumeRedraw

 

.NET Framework 版本:4.0.30319.42000
Foxtable 版本:2020.5.29.8
错误所在事件:自定义函数,选择文本文件导入项目表
详细错误信息:
调用的目标发生了异常。
未找到类型“Date”的公共成员“trim”。

 

 

 


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


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

            If cs.Length = Tables("统计").cols.count Then
               
Dim bb As String=cs(i1).trim()
                If bb > "" Then
                    If bb.Contains("时间") Then
                        Dim d As Date = cdate(bb)
                        r("日期")= Format(d, "yyyy-MM-dd")
else
                        r(i1) = cs(i1)
                    End If
                End If
               
            End If

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


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(有点蓝)         ...  发帖心情 Post By:2022/2/23 11:20:00 [只看该作者]

还得麻烦老师一下   现在是不报错了   但是数据行是空值

 

Dim  dlg As  new  OpenFileDialog
dlg.Filter =  "文本文件|*.txt"
'Tables("统计").StopRedraw
If  dlg.ShowDialog =  DialogResult.OK Then
    If DataTables.Contains("统计")  Then '如果表C已经加载
        DataTables.Unload("统计") '卸载表C
    End If
   
    Dim Multi As String
    Dim  strs As  String =  FileSys.ReadAllText(dlg.FileName, Encoding.Default)
    Dim Values11() As String =  strs.Replace(vbcr,"").split(vblf)
    For  i1 As  Integer =  0 To  0
        Dim  rs As  String =  Values11(0)
        For  i As  Integer =  0 To  0
            Dim  cs() As  String =  rs.Split(vbtab)
            output.Show(cs(0))
            Multi = cs(0)
        Next
    Next
   
    Dim Values() As String
    Values = Multi.split("|")
    Dim dtb As New DataTableBuilder("统计")
    For Index As Integer = 0 To Values.Length - 1
        Output.Show(Values(Index))
        If Values(Index).Contains("时间") OrElse Values(Index).Contains("日期")  Then
            dtb.AddDef("日期", Gettype(Date))
        End If
        dtb.AddDef(Values(Index), Gettype(String), 255)  
    Next
    dtb.Build()
   
    For i As Integer = 1 To Values11.length - 1
        Dim cs() As String = Values11(i).split("|")
        Dim r As Row = Tables("统计").Addnew()
        output.show(cs.Length-1)
        For i1 As Integer = 0 To math.min(cs.Length-1, Tables("统计").cols.count - 1)
            If cs.Length = Tables("统计").cols.count Then
               
                Dim bb As String=cs(i1).trim()
                If bb > "" Then
                    If bb.Contains("时间") OrElse bb.Contains("日期") Then
                        Dim d As Date = cdate(bb)
                        r("日期")= Format(d, "yyyy-MM-dd")
                    Else
                        r(i1) = cs(i1)
                    End If
                End If 
            End If  
        Next
    Next
End If
'Tables("统计").ResumeRedraw


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


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

请把数据文件发上来测试

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


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(有点蓝)请把数据文件发上来测试  发帖心情 Post By:2022/2/23 12:22:00 [只看该作者]

麻烦老师

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:qqq.txt

因为违法时间是字符  不便于实现按日期筛选  

所以在临时表中新增了一个日期列  且属性为date  想自动把违法时间转换成日期  然后实现按日期进行筛选


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


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

Dim  dlg As  new  OpenFileDialog
dlg.Filter =  "文本文件|*.txt"
'Tables("统计").StopRedraw
If  dlg.ShowDialog =  DialogResult.OK Then
    If DataTables.Contains("统计")  Then '如果表C已经加载
        DataTables.Unload("统计") '卸载表C
    End If
   
    Dim Multi As String
    Dim  strs As  String =  FileSys.ReadAllText(dlg.FileName, Encoding.Default)
    Dim Values11() As String =  strs.Replace(vbcr,"").split(vblf)
    For  i1 As  Integer =  0 To  0
        Dim  rs As  String =  Values11(0)
        For  i As  Integer =  0 To  0
            Dim  cs() As  String =  rs.Split(vbtab)
            output.Show(cs(0))
            Multi = cs(0)
        Next
    Next
   
    Dim Values() As String
    Values = Multi.split("|")
    Dim dtb As New DataTableBuilder("统计")
    For Index As Integer = 0 To Values.Length - 1
        Output.Show(Values(Index))
        If Values(Index).Contains("时间") OrElse Values(Index).Contains("日期")  Then
            dtb.AddDef("日期", Gettype(Date))
        End If
        dtb.AddDef(Values(Index), Gettype(String), 255)  
    Next
    dtb.Build()
   
    For i As Integer = 1 To Values11.length - 1
        Dim cs() As String = Values11(i).split("|")
        Dim r As Row = Tables("统计").Addnew()
        output.show(cs.Length-1)
        For i1 As Integer = 0 To math.min(cs.Length-1, Tables("统计").cols.count - 1)
                Dim bb As String=cs(i1).trim()
                If bb > "" Then
                    If Values(i1).Contains("时间") OrElse Values(i1).Contains("日期") Then
                        Dim d As Date = cdate(bb)
                        r("日期")= Format(d, "yyyy-MM-dd")
                    Else
                        r(i1) = cs(i1)
                    End If
                End If 
        Next
    Next
End If
'Tables("统计").ResumeRedraw

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


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(有点蓝)Dim  dlg As  new  O...  发帖心情 Post By:2022/2/23 14:15:00 [只看该作者]

老师  现在日期列会根据时间列来获取值 

但是数据行错位了呢  还得麻烦老师辛苦下  谢谢!

 


图片点击可在新窗口打开查看此主题相关图片如下:12.png
图片点击可在新窗口打开查看

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


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

多增加了一个列

 回到顶部
总数 19 1 2 下一页