文本文件的格式摘要如下:【2006-04-26】上海证券关于
【2006-04-25】上海证券关于1
【2006-04-25】公布05年年报、06年一季报及券商我想将日期和后面的内容分别导入到数据库的两个字段(riqi,content),程序如下:
Private Sub Command1_Click()
Dim i As String
Dim j As String
Dim m As String
Dim n As String
Dim filename As String
filename = InputBox("请输入数据文件位置:", "确认文件", "D:\580998.txt")
Open filename For Input As #1
Dim APP_PATH As String  '设置相对路径
If Right(App.Path, 1) = "\" Then
APP_PATH = App.Path
Else
APP_PATH = App.Path & "\"
End If
Set conn = New ADODB.Connection
conn.ConnectionString = "Driver={sql server};server=(local);uid=sa;pwd=sa;database=mydb"
conn.Open
Do While Not EOF(1)    '判断是否到文件末
    i = Input(1, #1)
    If i = "【" Then
        m = Input(10, #1) '将读入的字符赋给变量 m
    End If
     If i = "】" Then
             Do While (i <> "【" And (Not EOF(1)) And i <> Chr(13) And i <> Chr(10))
             n = n + Trim(Input(1, #1))
             loop
     End if  
conn.Execute "insert into pldr(riqi,content) values ('" + m + "','" + n + "')"   '将读入的字符插入到数据表中
Loop
Close #1
MsgBox "导入完成!"
End Sub    
   设置监视变量i,m,n,程序开始执行地一条记录没问题,但到变量m的时候老是把后面一条记录的东西都读进去了,也就是说第二个while语句的条件都没有判断,程序一直在执行n = n + Trim(Input(1, #1))这条语句,看了一天了还是看不出来逻辑上那里有错误,还望高手指点,在这谢过了先!!!!

解决方案 »

  1.   

    你这样也太麻烦了一行读入然后再分离就可以了何必那么麻烦
    Private Function GetKey(HTML, Start, Last, i)
       On Error Resume Next
    filearray = Split(HTML, Start)
    filearray2 = Split(filearray(i), Last)
    GetKey = filearray2(0)
    End Function
    Open App.Path & "\1.txt" For Input As #1Do While Not EOF(1)
    Line Input #1, s'读出一行来赋值给st=GetKey(HTML,  "【", "】", 1)'把"【""】"中间的日期分离到t里d=GetKey(HTML,  "【", "】", 2)'剩下的赋值给dLoopClose #1入库你自己搞吧 你自己的代码可以做到
      

  2.   

    d=GetKey(HTML,  "【", "】", 2)'剩下的赋值给d
    这句错了应该是
    d=GetKey(HTML,  "】", "【", 2)'剩下的赋值给d
      

  3.   

    可是我要导入的文件不是一行就一条记录这样子的,实际的文件是这样的:
    【2006-04-26】
    上海证券关于注销200万份白云机场认沽权证公告,    上海证券有限责任公司公布关于注销白云机场认沽权证的公告
    【2006-04-25】
    公布05年年报、06年一季报及券商注销白云机场认沽权证公告,上午停牌一小时    G穗机场公布2005年年报:每股收益0.25元,每股收益(扣除)0.25元,加权平均每股收益0.25元,加权平均每股收益(扣除)0.25元,每股净资产3.99元,调整后每股净资产3.92元,净资产收益率6.31%,加权平均净资产收益率6.35%,扣除非经常性损益后净利润250678611.76元,主营业务收入2149308234.93元,净利润251512856.24元,股东权益3985932660.32元。
        2006年一季报:每股收益0.07元,每股收益(扣除)0.07元,每股净资产4.06元,调整后每股净资产3.99元,净资产收益率1.77%,扣除非经常性损益后净利润71512191.09元,主营业务收入589704365.51元,净利润71764066.38元,股东权益4057696726.71元。
        东海证券有限责任公司公布关于注销白云机场认沽权证的公告
     
    以后的每条文件格式都是如上
    所以这样子的话用你的这种一行读入的方法还是不行啊。我原来的代码就是到第二个do while中就出不来了,一直在执行n=n+input(1,#1),用监视窗口看,原因是变量i一直为】,所以一直在do while中循环,退不出这个循环。所以还请这位高手再次指导一下。谢谢了先(原来没有说清楚完整的文本文件格式,真是不好意思 ,  :))
      

  4.   

    差不多的我这个分离函数可以自定义分离项的读入所有数据然后再分离就可以了Private Function GetKey(HTML, Start, Last, i)
       On Error Resume Next
    filearray = Split(HTML, Start)
    filearray2 = Split(filearray(i), Last)
    GetKey = filearray2(0)
    End Function
    Open App.Path & "\1.txt" For Input As #1
    Input #1, s'读出数据来赋值给s
    Close #1for i =1 to n(n是个常数你有多少项就是多少)
    t=GetKey(s ,  "【", "】", i)'把"【""】"中间的日期分离到t里d=GetKey(s ,  "】", "【", i)'剩下的赋值给dnext
    i=1的时候就把第一个分离出来
    t是日期 d 是后面的东西
    分别入库就可以了入库你自己搞吧 你自己的代码可以做到
      

  5.   

    我基本明白了,可是文件中的项数很多阿,总不能一项一项去数来确定n吧。
    是不是还是考虑要用do while循环来实现呢?????