文本文件中存储了一定格式的数据,但是不是标准的数据库格式,故不可能直接用database对象操作。
数据的存储格式基本为:开始一段为说明性文字,换行付之后为需要进入数据库的数据,数据之间行与行之间以换行符隔开,列与列之间以空格隔开,但是存在数据为空的单元(表现为空格)。
请问各位大虾,还有其他什么可行的办法可以将这样的文本文件转换到access数据库吗?

解决方案 »

  1.   

    如:文本文件如下:
                              中原高速(600020)
             ————XY纵横财经  版权所有  授权使用————
    `一、特别提示`                                  XY纵横财经 XY.COM.CN…………中间省略
    ` 九、该公司公告`                                XY纵横财经 XY.COM.CN
    …………中间省略
    资者定价配售发行28000万股A股,价格6.36元/股。2003年8月8日,“中原高
    速”(A股)在上交所上市。
    注:以上公司基本概况数据截止日期:20031027` 十一、资产负债表`                              XY纵横财经 XY.COM.CN
    ────────┬──────┬──────┬──────┬──────
    名称\年度       │  2003年中期│  2002年末期│  2001年末期│  2000年末期
    ────────┼──────┼──────┼──────┼──────
    总资产(万元)    │   290035.82│   325295.31│   271730.07│   227866.15
    流动资产(万元)  │    42626.36│    77275.97│    23030.53│     2063.49
    货币资金(万元)  │    40941.59│    75713.20│    18319.98│     1795.68
    应收帐款(万元)  │     1559.32│     1549.76│     4073.87│      267.80
    存货净额(万元)  │          --│          --│          --│          --
    长期投资(万元)  │          --│          --│          --│          --
    固定资产(万元)  │   228736.92│   227760.67│   226131.63│   220693.93
    无形资产(万元)  │    18672.54│    20258.68│    22567.90│     5108.73
    流动负债(万元)  │     7990.03│    57553.22│    44679.91│    82411.19
    短期借款(万元)  │          --│     5000.00│    10000.00│          --
    长期负债(万元)  │    93000.00│    93000.00│    83000.00│    27000.00
    股东权益(万元)  │   189045.79│   174742.10│   144050.16│   118454.96
    资本公积金(万元)│    41454.96│    41454.96│    41454.96│    41454.96
    盈余公积金(万元)│    11257.43│    11257.43│     5119.04│          --
    每股净资产(元)  │      2.4551│      2.2694│      1.8708│      1.5384
    调整每股净资产  │          --│          --│          --│          --
    股东权益比率(%) │      65.180│      53.718│      53.012│      51.984
    资产负债率(%)   │      34.820│      46.282│      46.988│      48.016
    每股公积金(元)  │      0.5384│      0.5384│      0.5384│      0.5384
    ────────┴──────┴──────┴──────┴──────
    注:"调整每股净资产"单位为元` 十二、损益表`                                    XY纵横财经 XY.COM.CN
    ─────────┬─────┬─────┬─────┬─────
    名称\年度         │2003年中期│2002年末期│2001年末期│2000年末期
    ─────────┼─────┼─────┼─────┼─────
    主营业务收入(万元)│  36320.43│  68165.91│  49297.59│  31965.11
    主营业务利润(万元)│  24319.85│  45363.23│  32270.06│  15398.09
    其他业务利润(万元)│    -41.61│     -6.29│        --│        --
    营业费用(万元)    │        --│    576.00│        --│        --
    管理费用(万元)    │    985.51│   2664.96│   1187.48│    455.87
    财务费用(万元)    │   2395.64│   4683.58│   5430.51│   5257.33
    投资收益(万元)    │        --│        --│        --│        --
    利润总额(万元)    │  21348.80│  37488.56│  25595.20│   9678.65
    净利润(万元)      │  14303.70│  30691.94│  25595.20│   8360.77
    未分配利润(万元)  │  59333.41│  45029.71│  20476.16│        --
    每股收益(元)      │     0.186│     0.399│     0.332│     0.109
    净资产收益率(%)   │     7.570│    17.560│    17.770│     7.059
    每股未分配利润(元)│     0.771│     0.585│     0.266│        --
    ─────────┴─────┴─────┴─────┴─────` 十三、现金流量表`                              XY纵横财经 XY.COM.CN
    ───────────┬──────┬──────┬──────┬──────
    名称\年度(万元)       │  2003年中期│  2002年末期│       d    │c
    ───────────┼──────┼──────┼──────┼──────
    经营活动现金流入      │          --│    71128.45│            │            
    经营活动现金流出      │          --│    21998.00│            │            
    经营活动现金净流量    │    21899.10│    49130.44│            │            
    投资活动现金流入      │          --│          --│            │            
    投资活动现金流出      │          --│     9900.44│            │            
    投资活动现金净流量    │   -28929.19│    -9900.44│            │            
    筹资活动现金流入      │          --│   121000.00│            │            
    筹资活动现金流出      │          --│   102836.78│            │            
    筹资活动现金净流量    │   -27741.53│    18163.22│            │            
    现金及等价物净流量    │   -34771.61│    57393.22│            │            
    每股经营活动现金净流量│       0.284│       0.638│            │            
    ───────────┴──────┴──────┴──────┴──────
    注:每股经营活动现金净流量单位为元` 十四、财务状况`                                XY纵横财经 XY.COM.CN
    ────────┬──────┬──────┬──────┬──────
    名称\年度       │  2003年中期│  2002年末期│  2001年末期│  2000年末期
    ────────┼──────┼──────┼──────┼──────
    应收帐款周转率  │          --│          --│      22.709│          --
    存货周转率      │          --│          --│          --│          --
    总资产周转率    │          --│          --│       0.197│          --
    流动比率        │       5.335│       1.343│       0.516│       0.025
    速动比率        │          --│          --│          --│          --
    主营业务增长率  │          --│      38.274│          --│          --
    税后利润增长率  │          --│      19.913│          --│          --
    净资产增长率    │          --│          --│      21.608│          --
    总资产增长率    │          --│          --│      19.250│          --
    ────────┴──────┴──────┴──────┴──────` 十五、公司相关评论`                            XY纵横财经 XY.COM.CN
    [1]中原高速:奔驰在希望的快车道---访中原高速董事长宋春雷
     …………中间省略
      

  2.   

    现在要提取里面的几个表Private Sub Form_Load()
        GetSomeTable
    End Sub'你调用getsometable即可,个别的地方需要你自己去完善,
    '比如d:\600020.txt你可以做一个参数、比如如果表存在就删除、比如临时文件的删除等等。。
    '总之这些都是小事了,你自己处理吧Private Sub GetSomeTable()
    '从文本中提取一些表格
        Call StartChange("` 十一、资产负债表`", "资产负债表")
        Call StartChange("` 十二、损益表`", "损益表")
        Call StartChange("` 十三、现金流量表`", "现金流量表")
        Call StartChange("` 十四、财务状况`", "财务状况")
    End SubPrivate Sub StartChange(strSTable As String, strTTable As String)
    '开始提取某个特定表格
        Dim strTmp As String
        Dim strArray() As String
        Dim i As Integer
        Dim flag As Boolean
        
        Open "d:\600020.txt" For Input As #1
        strTmp = StrConv(InputB(LOF(1), #1), vbUnicode)
        Close #1
        strArray = Split(strTmp, vbCrLf) '将文件内容存到数组里,一个元素代表文件的一行    For i = 0 To UBound(strArray)
            If InStr(strArray(i), strSTable) <> 0 Then
                flag = True
                i = i + 1
                Open "d:\" & strTTable & ".txt" For Output As #1
            End If
            If flag Then
                If Left(strArray(i), 1) <> "─" Then
                    Print #1, strArray(i)
                Else
                    icount = icount + 1
                End If
                If icount = 3 Then
                    Close #1
                    Call WriteTempSchemia(strTTable & ".txt", "│")
                    Call TxtToMdb("d:", strTTable & ".txt", "d:\out.mdb", strTTable)
                    Exit For
                End If
            End If
        Next i
        
    End SubPublic Sub WriteTempSchemia(strFileName As String, strSeparator As String)
    '写入格式符号文件
        Open "d:\Schema.ini" For Output As #1
            Print #1, "[" & strFileName & "]"
            Print #1, "Format=Delimited(" & strSeparator & ")"
        Close #1
    End SubPrivate Sub TxtToMdb(sTxtPath As String, sTxtFileName As String, sAccessFullFileName As String, sAccessTable As String)
    '功能:将文本文件导入到Access中的表
    '调用:Call TxtToMdb("c:\","test.txt","c:\a.mdb","NewTempTable")
    '结果:将c:\test.txt导入到c:\a.mdb中的NewTempTable表中    Dim db As DAO.Database
        
        On Error Resume Next
        Set db = DBEngine.CreateDatabase(sAccessFullFileName, dbLangGeneral)
        If Err.Number = 3204 Then
            Set db = Workspaces(0).OpenDatabase(sAccessFullFileName)
        End If
        db.Execute "SELECT * into " & sAccessTable & " FROM [Text;HDR=NO;DATABASE=" & sTxtPath & "]." & sTxtFileName
        db.Close
        Set db = Nothing
    End Sub
      

  3.   

    复制粘贴到excel里面,如果可以识别成表格的话就可以读取了
      

  4.   

    谢谢小马哥的例子,不过还有一个问题,就是我的数据库文件没有“---”表示数据为空而是直接用空格,也没有分隔符"|",大概是下面这样:
    ` 十二、损益表`                                    XY纵横财经 XY.COM.CN
    2003年中期    2002年末期   2001年末期   2000年末期
    36320.43     68165.91     49297.59    31965.11
    24319.85     45363.23     32270.06     15398.09
    -41.61                     -6.29        
    576.00
    这种情况要怎么处理呢??
      

  5.   

    555555,问题是就是没有规则,只是按照一定的格式,用空格使它们对齐而已。
    我现在在用excel作为临时文件,把文本文件经过一定的格式处理后用excel打开,经过处理得到正确的表格,再转为access数据库。
    但是现在又遇到一个问题,我用excel处理后用ActiveWorkbook.SaveAs "1.xls"将它存为一个.xls文件,可是程序总是提示“1.xls文件已被修改,是否保存其修改内容。”此时如果选择“否”,1.xls文件其实已经存在,但是却不能转为access文件(Set db = OpenDatabase(sExcelPath, True, False, "Excel 5.0")),如果选择“是”重新保存的文件则可以直接转为access文件,这是什么原因呢??