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


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

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

帅哥哟,离线,有人找我吗?
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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
cnsjroom
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | 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”。

 

 

 


 回到顶部
帅哥哟,离线,有人找我吗?
cnsjroom
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | 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


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


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

麻烦老师

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

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

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


 回到顶部
帅哥哟,离线,有人找我吗?
cnsjroom
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | 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
图片点击可在新窗口打开查看

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


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(有点蓝)多增加了一个列  发帖心情 Post By:2022/2/23 15:14:00 [显示全部帖子]

    怎么修正呢?  红色部分代码我是理解为非i1值之外的内容 

 

先遍历i1的列与值  然后根据包含时间或日期与否  来对应给日期列赋值

 

For i As Integer = 1 To Values11.length - 1
        Dim cs() As String = Values11(i).split("|")
        Dim r As Row = Tables("统计").Addnew()
        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


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


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(有点蓝)和这个代码无关。建表的代码有问题,...  发帖心情 Post By:2022/2/23 15:38:00 [显示全部帖子]

    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()

 

 

这样会把违法时间列  直接修正为日期列  然后将违法时间列值弄成日期列  不会再显示原来的违法时间列及对应的字符内容

 

        If Values(Index).Contains("时间") OrElse Values(Index).Contains("日期")  Then
            dtb.AddDef("日期", Gettype(Date))
        End If
            dtb.AddDef(Values(Index), Gettype(String), 255)
        这样会新增一个日期列,也会保留违法时间列   我想将整个日期列的值从  违法时间这个列来获取  同时违法时间列的值不动 依然维持导入时的字符


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


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(有点蓝)那么建议把日期列放到最后再添加,不...  发帖心情 Post By:2022/2/23 16:46: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
        dtb.AddDef(Values(Index), Gettype(String), 255)  
    Next
    For Index1 As Integer = 0 To Values.Length - 1
        Output.Show(Values(Index1))
        If Values(Index1).Contains("时间") OrElse Values(Index1).Contains("日期")  Then
            dtb.AddDef("日期", Gettype(Date))
        End If 
    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("时间") 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

[此贴子已经被作者于2022/2/23 16:48:18编辑过]

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


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

当前运行效果如下:  违法时间 被清空了??

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

当前代码如下:

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
        dtb.AddDef(Values(Index), Gettype(String), 255)  
    Next
    For Index1 As Integer = 0 To Values.Length - 1
        Output.Show(Values(Index1))
        If Values(Index1).Contains("时间") OrElse Values(Index1).Contains("日期")  Then
            dtb.AddDef("日期", Gettype(Date))
        End If 
    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 +1 Then
               
                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 
            'End If
        Next
    Next
End If
'Tables("统计").ResumeRedraw



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


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(有点蓝)仔细看16楼  发帖心情 Post By:2022/2/23 17:31:00 [显示全部帖子]

谢谢老师   问题已经得以解决  多加一句红色部分代码  !

Dim  dlg As  new  OpenFileDialog
dlg.Filter =  "文本文件|*.txt"

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
        dtb.AddDef(Values(Index), Gettype(String), 255)
    Next
    For Index1 As Integer = 0 To Values.Length - 1
        Output.Show(Values(Index1))
        If Values(Index1).Contains("时间") OrElse Values(Index1).Contains("日期")  Then
            dtb.AddDef("日期", Gettype(Date))
        End If
    Next
    dtb.Build()
   
    Tables("统计").StopRedraw
    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 +1 Then
           
            Dim bb As String=cs(i1).trim()
            If bb > "" Then
                If Values(i1).Contains("时间")  Then
                    Dim d As Date = cdate(bb)
                    r("日期")= Format(d, "yyyy-MM-dd")
                    r(i1) = cs(i1)
                Else
                    r(i1) = cs(i1)
                End If
            End If
            'End If
        Next
    Next
    Tables("统计").ResumeRedraw
End If


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