Menentukan kualifikasi Teks saat mengimpor file csv ke SQL Server DB

Saya punya file csv yang dibatasi koma, masalahnya ada juga koma di dalam kolom.

TEXT,["pn","service"]

TEXT ada di satu kolom dan ["pn","service"] di kolom lainnya.

Bagaimana saya bisa menggunakan kualifikasi teks untuk memisahkan kolom dengan benar? masukkan deskripsi gambar di sini


person Kaja    schedule 29.08.2018    source sumber
comment
Jika nilainya '["pn","service"]' (bukan '"pn","service"') maka file Anda bukan file CSV yang valid. Jika karakter yang Anda gunakan untuk menentukan batas dapat/akan berada dalam suatu nilai, maka Anda harus menggunakan kualifikasi teks. Tanpa keluar, maka pembatas (dalam kasus Anda ,) dalam nilai teks akan diperlakukan sebagai pembatas; ini berlaku untuk semua pembaca CSV yang Anda miliki. Jika Anda tidak dapat mengubahnya, Anda harus menggunakan tugas Skrip di SSIS dan membangun semuanya dari awal.   -  person Larnu    schedule 29.08.2018
comment
Selain itu, jika Anda dapat mengubah nilai agar memiliki pengidentifikasi kutipan, jangan gunakan '", karena itu juga ada dalam nilai teks Anda. Jika Anda bisa, saya sarankan mengubah pembatas Anda. Saya mencoba menggunakan hal-hal seperti pipa (|), karena sangat jarang muncul data.   -  person Larnu    schedule 29.08.2018


Jawaban (1)


Saya baru-baru ini harus menangani ini dan menawarkan untuk membungkus bidang dengan pengidentifikasi. Saya memodifikasi makro di bawah ini untuk memisahkan dengan pipa, bukan dengan tanda kutip. Pos pengguna super memiliki lebih banyak opsi. Lihat https://support.microsoft.com/en-us/help/291296/procedure-to-export-a-text-file-with-both-comma-and-quote-delimiters-i dan https://superuser.com/questions/130592/how-do-you-force-excel-to-quote-all-columns-of-a-csv-file

Diperbarui sesuai saran @ Larnu - apa yang saya gunakan untuk membungkus ulang beberapa file data sebelum mengimpornya untuk satu kali pemuatan. Berhati-hatilah saat membuka CSV di excel secara langsung... Anda mungkin melihat perubahan nilai.

Sub PipeCommaExport()
   ' Dimension all variables.
   Dim DestFile As String
   Dim FileNum As Integer
   Dim ColumnCount As Integer
   Dim RowCount As Integer

   ' Prompt user for destination file name.
   DestFile = InputBox("Enter the destination filename" _
      & Chr(10) & "(with complete path):", "Quote-Comma Exporter")

   ' Obtain next free file handle number.
   FileNum = FreeFile()

   ' Turn error checking off.
   On Error Resume Next

   ' Attempt to open destination file for output.
   Open DestFile For Output As #FileNum

   ' If an error occurs report it and end.
   If Err <> 0 Then
      MsgBox "Cannot open filename " & DestFile
      End
   End If

   ' Turn error checking on.
   On Error GoTo 0

   ' Loop for each row in selection.
   For RowCount = 1 To Selection.Rows.Count

      ' Loop for each column in selection.
      For ColumnCount = 1 To Selection.Columns.Count

         ' Write current cell's text to file with quotation marks.
         Print #FileNum, "|" & Selection.Cells(RowCount, _
            ColumnCount).Text & "|";

         ' Check if cell is in last column.
         If ColumnCount = Selection.Columns.Count Then
            ' If so, then write a blank line.
            Print #FileNum,
         Else
            ' Otherwise, write a comma.
            Print #FileNum, ",";
         End If
      ' Start next iteration of ColumnCount loop.
      Next ColumnCount
   ' Start next iteration of RowCount loop.
   Next RowCount

   ' Close destination file.
   Close #FileNum
End Sub
person TEEKAY    schedule 29.08.2018
comment
Jika Anda memposting tautan, idealnya Anda menyertakan bagian yang valid. Tautan bisa mati, namun teks yang Anda miliki di postingan Anda tidak akan mati. - person Larnu; 29.08.2018