读书人

怎么加快读取文本文件(或者csv文件)

发布时间: 2012-02-12 17:16:34 作者: rapoo

如何加快读取文本文件(或者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;
}
}

读书人网 >VB Dotnet

热点推荐