.csv檔案按逗號分割,非簡單的split分割
阿新 • • 發佈:2021-07-16
1、csv檔案各列預設是以英文逗號(,)來分割的。但是在實際中,資料中也會有包含英文逗號,Windows在儲存這類的資料時會把含有逗號的資料當做字串儲存,在兩端會加上雙引號。此時如果簡單的用英文逗號做split,讀出來的資料完全不是想要的。(在確保資料中不包含特殊字元的情況下可以用split)
2、ADO、OLEDB讀取CSV檔案
這種可以很快讀取資料,也可以避免1中的問題。
但是出現了另外一種情況,ISAM機制會自動判斷各列的資料型別(詳細參閱https://www.douban.com/note/18510346/)。此時,如果實際資料型別與判斷出來的資料型別不匹配的話,系統會用NULL替換,造成資料的丟失。
注:在讀取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:\temp\test.csv")) { parser.TextFieldType = FieldType.Delimited; parser.SetDelimiters(","); while (!parser.EndOfData) { //Processing row string[] fields = parser.ReadFields(); foreach (string field in fields) { //TODO: Process field } } } } } }
————————————————
版權宣告:本文為CSDN博主「cilves」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。
原文連結:https://blog.csdn.net/hancluo/article/details/86590732