【问题标题】:Text Quilifier In CSV File VB.NETCSV 文件 VB.NET 中的文本限定符
【发布时间】:2020-11-19 12:30:55
【问题描述】:

我正在尝试将 csv 文件拆分为列,该文件包含地址的文本限定符,但地址在“”内用逗号拆分。

我需要能够阅读文本限定符并忽略逗号,直到文本限定符结束。并非所有列都有文本限定符。

我已经设法将行分成正确的格式(列数)和错误的格式(太多列),但我想不出我会如何处理这个!

有什么建议或文章吗?

Dim path As String = txb_FileName.Text
    Dim tbl = New DataTable
    Dim Btbl = New DataTable
    
    'OpenFile
    Dim lines = IO.File.ReadAllLines(path)

    'Check If First Line is in correcct format
    Dim colCount = lines.First.Split(","c).Length
    Dim rowCount = lines.Count

    tbl.Columns.Add(New DataColumn("Column_1"))
    tbl.Columns.Add(New DataColumn("Column_2"))
    tbl.Columns.Add(New DataColumn("Column_3"))
    tbl.Columns.Add(New DataColumn("Column_4"))
    tbl.Columns.Add(New DataColumn("Column_5"))
    tbl.Columns.Add(New DataColumn("Column_6"))
    tbl.Columns.Add(New DataColumn("Column_7"))
    tbl.Columns.Add(New DataColumn("Column_8"))
    tbl.Columns.Add(New DataColumn("Column_9"))
    tbl.Columns.Add(New DataColumn("Column_10"))
    tbl.Columns.Add(New DataColumn("Column_11"))
    tbl.Columns.Add(New DataColumn("Column_12"))
    tbl.Columns.Add(New DataColumn("Column_13"))
    tbl.Columns.Add(New DataColumn("Column_14"))
    tbl.Columns.Add(New DataColumn("Column_15"))
    tbl.Columns.Add(New DataColumn("Column_16"))
    tbl.Columns.Add(New DataColumn("Column_17"))
    tbl.Columns.Add(New DataColumn("Column_18"))
    tbl.Columns.Add(New DataColumn("Column_19"))
    tbl.Columns.Add(New DataColumn("Column_20"))
    tbl.Columns.Add(New DataColumn("Column_21"))
    tbl.Columns.Add(New DataColumn("Column_22"))
    tbl.Columns.Add(New DataColumn("Column_23"))
    tbl.Columns.Add(New DataColumn("Column_24"))
    tbl.Columns.Add(New DataColumn("Column_25"))
    tbl.Columns.Add(New DataColumn("Column_26"))
    tbl.Columns.Add(New DataColumn("Column_27"))
    tbl.Columns.Add(New DataColumn("Column_28"))
    tbl.Columns.Add(New DataColumn("Column_29"))
    tbl.Columns.Add(New DataColumn("Column_30"))
    tbl.Columns.Add(New DataColumn("Column_31"))
    tbl.Columns.Add(New DataColumn("Column_32"))
    tbl.Columns.Add(New DataColumn("Column_33"))




    For Each line In lines

        Dim colCount1 = lines.First.Split(","c).Length

        Dim objFields = From field In line.Split(","c)
                        Select field
        If line.Split(","c).Count > 33 Then

                Dim BnewRow = Btbl.Rows.Add()
                BnewRow.ItemArray = objFields.ToArray()

            Else
                Dim newRow = tbl.Rows.Add()
                newRow.ItemArray = objFields.ToArray()

            End If
        ' End If

    Next

    Dim dgv1 As New DataGridView

    dgv1.DataSource = tbl

    Me.Controls.Add(dgv1)

数据:

66641515,KGRK-KdZ-1 CpRpNGVDRGK ,9090-11-15,9090-11-16,KEKHTGpG,PREETD,4147399967,1999-05-95,pE46NR,"",94,FEMGpE,peimeKken,"",E01013696,P,440,PDppGR 9 TEKTDNG,PnkKidi@gmail.mom,+447754601754,"",FGpKE,knue,4147399967,"","","64 Genmfn Kkneek, peimeKken, pE4 6NR","",07594453519,"",C49044,100.00,1
66434471,KGRK-KdZ-1 CpRpNGVDRGK ,9090-11-16,9090-11-17,TDpKDNKpN,EMMG,4904714506,1943-09-15,DN394PG,"",37,FEMGpE,Nonkh EaKk pinmolnKhine,"",E01013160,P,440,PDppGR 9 TEKTDNG,ega_537@hokmail.mom,+447775070709,01479317194,FGpKE,knue,4904714506,"","","1a Beamon Counk, GnimKbf, Koukh HumbenKide, DN39 4PG","",07775070709,01479310546,B41655,100.00,1
66417599,KGRK-KdZ-1 CpRpNGVDRGK ,9090-11-16,9090-11-17,pppLD,GGNE,4964994134,1967-19-19,CM41PT,"",59,FEMGpE,EKKex,"",E01091493,P,440,PDppGR 9 TEKTDNG,"",+447790990963,"",FGpKE,knue,4964994134,"","","17 Glan Road, Tikham, EKKex, CM4 1PT","",07790990963,"",F41030,100.00,1
66694443,KGRK-KdZ-1 CpRpNGVDRGK ,9090-11-15,9090-11-17,CppE,BGRBGRG,4344635399,1930-09-14,pK951HG,"",90,FEMGpE,peedK,"",E01011403,P,440,PDppGR 9 TEKTDNG,auguKkuK.mounk@hm-one.mo.uk,"","",TRGE,knue,4344635399,"","","GuguKkuK Counk Cane Home, Chunmh GandenK, Ganfonkh, pEEDK, TeKk LonkKhine, pK95 1HG","","",01133450000,B46044,100.00,1
66656193,KGRK-KdZ-1 CpRpNGVDRGK ,9090-11-16,9090-11-16,KGNDHER,GGRVDNDER,4366119969,1975-04-30,GB44EZ,"",45,MGpE,Hillingdon,"",E01009493,P,440,PDppGR 9 TEKTDNG,m19guv@hokmail.mom,+447416415995,09045491079,FGpKE,knue,4366119969,"","","44 Meadow View Road, HafeK, MiddleKex, GB4 4EZ","",07416415995,"",E45191,100.00,1
66764369,KGRK-KdZ-1 CpRpNGVDRGK ,9090-11-16,9090-11-17,EPPK,ZENG,4366466635,1971-01-97,MK164RF,"",49,FEMGpE,Milkon KefneK,"",E01016749,P,440,PDppGR 9 TEKTDNG,z.eppK@bkinkennek.mom,+447944047447,"",FGpKE,knue,4366466635,"","","41 pGTRENCE TGpK, NETPpRT PGGNEpp, BGCKK, MK16 4RF",z.eppK@bkinkennek.mom,07944047447,07944047447,K49074,100.00,1
66651739,KGRK-KdZ-1 CpRpNGVDRGK ,9090-11-16,9090-11-16,MGRTDN,NDCHppGK,4349444339,1975-11-13,KT49pH,"",45,MGpE,Kunnef,"",E01030335,P,440,PDppGR 9 TEKTDNG,Nimk.Kmankin@fewo.mom,+447914519619,"",FGpKE,knue,4349444339,"","","4 DKland Fanm Road, TeKk MoleKef, Kunnef, KT4 9pH","",07914519619,09044730669,H41074,100.00,1
66400539,KGRK-KdZ-1 CpRpNGVDRGK ,9090-11-16,9090-11-17,MDppK,EMMG,4346996744,1945-11-96,KE979RX,"",34,FEMGpE,pambekh,"",E01003065,P,440,PDppGR 9 TEKTDNG,egamillK040@gmail.mom,+447439790559,"",FGpKE,knue,4346996744,"","","Flak 10 pilian Rolfe HouKe, VinmenneK EKkake Hamilkon Road, ppNDpN, KE97 9RX","",07439790559,"",G45199,100.00,1
66657901,KGRK-KdZ-1 CpRpNGVDRGK ,9090-11-16,9090-11-16,CpKTEppp,BEN,4490006945,1946-11-19,KK131NG,"",34,MGpE,EKKex,"",E01091304,P,440,PDppGR 9 TEKTDNG,"",+447494144506,"",FGpKE,knue,4490006945,"","","90 Kkokefelde, PikKea, BGKDpDpN, EKKex, KK13 1NG","",07990949067,01964554677,F41031,100.00,1
66737591,KGRK-KdZ-1 CpRpNGVDRGK ,9090-11-16,9090-11-17,CpRDDNGpEL,DRENE,4499914179,1944-11-91,TG149GB,"",75,FEMGpE,Tnaffond,"",E01006075,P,440,PDppGR 9 TEKTDNG,inene.mondinglef@Kkf.mom,+447945357514,01613076500,FGpKE,knue,4499914179,"","","91 The PoplanK, NonmanK Plame, GpTRDNCHGM, CheKhine, TG14 9GB",inene.mondinglef@Kkf.mom,07945357514,01619076500,P91004,100.00,1

【问题讨论】:

    标签: string csv text split


    【解决方案1】:

    您可以为此使用TextFieldParser

    更多示例请参见this answer

    【讨论】:

      【解决方案2】:
              Using MyReader As New Microsoft.VisualBasic.FileIO.
      TextFieldParser("C:\20201118025447904026_DE279D.csv")
      
              MyReader.TextFieldType =
                  Microsoft.VisualBasic.FileIO.FieldType.Delimited
              MyReader.Delimiters = New String() {","}
              Dim currentRow As String()
      
              MyReader.CommentTokens = New String() {""}
              MyReader.HasFieldsEnclosedInQuotes = True
      
              'Loop through all of the fields in the file. 
              'If any lines are corrupt, report an error and continue parsing. 
              While Not MyReader.EndOfData
                  Try
                      currentRow = MyReader.ReadFields()
                      ' Include code here to handle the row.
                  Catch ex As Microsoft.VisualBasic.FileIO.MalformedLineException
                      MsgBox("Line " & ex.Message &
                      " is invalid.  Skipping")
                  End Try
              End While
      

      【讨论】:

        猜你喜欢
        • 2016-07-11
        • 1970-01-01
        • 2013-05-23
        • 1970-01-01
        • 1970-01-01
        • 2014-10-16
        • 2011-03-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多