1. 程式人生 > 其它 >.csv檔案按逗號分割,非簡單的split分割

.csv檔案按逗號分割,非簡單的split分割

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