首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VB Dotnet >

怎么加快读取文本文件(或者csv文件)的速度,多谢啦

2012-02-12 
如何加快读取文本文件(或者csv文件)的速度,谢谢啦老板嫌速度慢,叫我加快读取速度,请各位帮帮忙吧代码如下,

如何加快读取文本文件(或者csv文件)的速度,谢谢啦
老板嫌速度慢,叫我加快读取速度,请各位帮帮忙吧
代码如下,读的是csv文件
                Dim   sr   As   System.IO.TextReader
                Dim   array_line()   As   String
                Dim   i   As   Integer
                Dim   j   As   Integer
                Dim   strLine   As   String
                Try
                        PsGetData   =   True
                       
                        sr   =   New   StreamReader(strPath,   System.Text.Encoding.Default)
                       
                        sr.ReadLine()
                       
                        '计算行数
                        i   =   1
                        Do
                                If   sr.Peek()   =   -1   Then
                                        Exit   Do
                                End   If
                                strLine   =   sr.ReadLine()
                                i   =   i   +   1
                        Loop

                        sr.Close()

                        '定义数组
                        ReDim   array(i,   int項目数)

                        '取得数据
                        sr   =   New   StreamReader(strPath,   System.Text.Encoding.Default)
                        i   =   1
                        Do
                                array_line   =   Split(sr.ReadLine(),   ", ")

                                For   j   =   0   To   UBound(array_line)


                                        array(i,   j   +   1)   =   array_line(j)
                                Next
                                If   sr.Peek   =   -1   Then
                                        Exit   Do
                                End   If
                                i   =   i   +   1
                        Loop
                Catch   ex   As   DirectoryNotFoundException
                        Call   cf_MsgScreen(Me,   C_ERROR,   C_DIRECTORYNOTFOUND)
                        PsGetData   =   False
                        Exit   Function
                Catch   ex   As   FileNotFoundException
                        Call   cf_MsgScreen(Me,   C_ERROR,   C_FILENOTFOUND)
                        PsGetData   =   False
                        Exit   Function
                Catch   ex   As   Exception
                        Call   cf_MsgScreen(Me,   C_ERROR,   ex.Message)
                        PsGetData   =   False
                        Exit   Function
                End   Try

                sr.Close()

                PsGetData   =   True

        End   Function
代码中,先计算了行数,用来定义数组,然后将数据读进数组,是不适因为使用StreamReader,所以慢呢。

[解决办法]
使用 StringBuilder/ ArrayList 不用定义数组,但行数非常多的话,也困难。


那就不计算行数,直接读取、分析、运用——已经不用定义什么数组。



[解决办法]
先定义一个很大的数组。
比如:Dim array_line(1000000) As String
只是定义的话,就不占内存。而且字符串不赋值也不占内存
[解决办法]
//如何让2维数组的一行直接等于一个一维数组?
好像可以直接赋值的
[解决办法]
给你一段现成代码,是读到DataSet里的
public DataSet GetDataSetFromCSV(string filePath, string fileName)
{
string strConn = @ "Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq= ";


strConn += filePath; //filePath, For example: C:\
strConn += ";Extensions=asc,csv,tab,txt; ";
OdbcConnection objConn = new OdbcConnection(strConn);
DataSet dsCSV = new DataSet();
try
{
string strSql = "select * from " + fileName; //fileName, For example: 1.csv
OdbcDataAdapter odbcCSVDataAdapter = new OdbcDataAdapter(strSql, objConn);
odbcCSVDataAdapter.Fill(dsCSV);
return dsCSV;
}
catch (Exception ex)
{
throw ex;
}
}

热点排行