1、csv⽂件各列默认是以英⽂逗号(,)来分割的。但是在实际中,数据中也会有包含英⽂逗号,Windows在保存这类的数据时会把含有逗号的数据当做字符串保存,在两端会加上双引号。此时如果简单的⽤英⽂逗号做split,读出来的数据完全不是想要的。(在确保数据中不包含特殊字符的情况下可以⽤split)
2、ADO、OLEDB读取CSV⽂件
这种可以很快读取数据,也可以避免1中的问题。
注:在读取EXCEL⽂件的时候,可以设 IMEX=1 ,此时会把所有列作为⽂本读取,但是CSV中该参数没⽤。简单⽰例(OLEDB):
' 读取csv到Datatable
Dim Source_Path As String
Dim File_name As String = File_FullName.Split(\"\\\")(UBound(File_FullName.Split(\"\\\"))) Source_Path = File_FullName.Replace(File_name, \"\") Try
Dim connectionString As String = \"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\" & Source_Path & \";Extended Properties=\"\"text;HDR=Yes;FMT=Delimited\"\"\" Dim conn As New OleDbConnection(connectionString) conn.Open()
Dim cmdSelect As OleDbDataAdapter
cmdSelect = New OleDbDataAdapter(\"select * from \" & \"[\" & File_name & \"]\", conn) Dim dt As DataTable = New DataTable() cmdSelect.Fill(dt) conn.Close() Return dt
Catch ex As Exception Debug.Print(ex.ToString) Return False End Try
C#
//需要先添加Microsoft.VisualBasic的引⽤using Microsoft.VisualBasic.FileIO;namespace ConsoleApp1{
class Program {
static void Main(string[] args) {
using (TextFieldParser parser = new TextFieldParser(@\"c:\emp\est.csv\")) {
parser.TextFieldType = FieldType.Delimited; parser.SetDelimiters(\); while (!parser.EndOfData) {
//Processing row
string[] fields = parser.ReadFields(); foreach (string field in fields) {
//TODO: Process field } } } } }}
因篇幅问题不能全部显示,请点此查看更多更全内容