Working with commas in a comma delimited file












1















I have a vb project that imports a csv file and some of the data contains commas. The fields with the commas are in double quotes.



I am creating a datagridview from the header row of the csv then importing the remainder of the file into the dgv but the fields with commas are causing a problem. The fields are not fixed width.



I think I need a way to qualify the commas as a delimiter based on double quote or some other method of importing the data into the dgv.



Thanks



Using objReader As New StreamReader(FName)
Dim line As String = objReader.ReadLine()
Do While objReader.Peek() <> -1
line = objReader.ReadLine()
Dim splitLine() As String = line.Split(",")
DataGridView1.Rows.Add(splitLine)
Application.DoEvents()
Loop
End Using


Example Data:



1,"VALIDFLAG, NOGPS",0,1.34,3.40,0.17,1










share|improve this question


















  • 2





    Don't use Split() to read CSV data. The problem you ran into here with commas is only the beginning. Don't use RegEx, either. Same issue: there are way more edge cases than you might think. Do get a dedicated CVS reader. There are at least three included in the .Net framework, including TextFieldParser.

    – Joel Coehoorn
    Nov 14 '18 at 22:29








  • 2





    Possible duplicate of read csv file in vb.net

    – Slai
    Nov 14 '18 at 22:34











  • I have to agree with @JoelCoehoorn and suggest that you use a TextFieldParser. In that case, all you have to do is set the HasFieldsEnclosedInQuotes property to True and the work is done for you.

    – jmcilhinney
    Nov 14 '18 at 22:41


















1















I have a vb project that imports a csv file and some of the data contains commas. The fields with the commas are in double quotes.



I am creating a datagridview from the header row of the csv then importing the remainder of the file into the dgv but the fields with commas are causing a problem. The fields are not fixed width.



I think I need a way to qualify the commas as a delimiter based on double quote or some other method of importing the data into the dgv.



Thanks



Using objReader As New StreamReader(FName)
Dim line As String = objReader.ReadLine()
Do While objReader.Peek() <> -1
line = objReader.ReadLine()
Dim splitLine() As String = line.Split(",")
DataGridView1.Rows.Add(splitLine)
Application.DoEvents()
Loop
End Using


Example Data:



1,"VALIDFLAG, NOGPS",0,1.34,3.40,0.17,1










share|improve this question


















  • 2





    Don't use Split() to read CSV data. The problem you ran into here with commas is only the beginning. Don't use RegEx, either. Same issue: there are way more edge cases than you might think. Do get a dedicated CVS reader. There are at least three included in the .Net framework, including TextFieldParser.

    – Joel Coehoorn
    Nov 14 '18 at 22:29








  • 2





    Possible duplicate of read csv file in vb.net

    – Slai
    Nov 14 '18 at 22:34











  • I have to agree with @JoelCoehoorn and suggest that you use a TextFieldParser. In that case, all you have to do is set the HasFieldsEnclosedInQuotes property to True and the work is done for you.

    – jmcilhinney
    Nov 14 '18 at 22:41
















1












1








1








I have a vb project that imports a csv file and some of the data contains commas. The fields with the commas are in double quotes.



I am creating a datagridview from the header row of the csv then importing the remainder of the file into the dgv but the fields with commas are causing a problem. The fields are not fixed width.



I think I need a way to qualify the commas as a delimiter based on double quote or some other method of importing the data into the dgv.



Thanks



Using objReader As New StreamReader(FName)
Dim line As String = objReader.ReadLine()
Do While objReader.Peek() <> -1
line = objReader.ReadLine()
Dim splitLine() As String = line.Split(",")
DataGridView1.Rows.Add(splitLine)
Application.DoEvents()
Loop
End Using


Example Data:



1,"VALIDFLAG, NOGPS",0,1.34,3.40,0.17,1










share|improve this question














I have a vb project that imports a csv file and some of the data contains commas. The fields with the commas are in double quotes.



I am creating a datagridview from the header row of the csv then importing the remainder of the file into the dgv but the fields with commas are causing a problem. The fields are not fixed width.



I think I need a way to qualify the commas as a delimiter based on double quote or some other method of importing the data into the dgv.



Thanks



Using objReader As New StreamReader(FName)
Dim line As String = objReader.ReadLine()
Do While objReader.Peek() <> -1
line = objReader.ReadLine()
Dim splitLine() As String = line.Split(",")
DataGridView1.Rows.Add(splitLine)
Application.DoEvents()
Loop
End Using


Example Data:



1,"VALIDFLAG, NOGPS",0,1.34,3.40,0.17,1







vb.net csv datagridview






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 14 '18 at 22:09









Road KingRoad King

92210




92210








  • 2





    Don't use Split() to read CSV data. The problem you ran into here with commas is only the beginning. Don't use RegEx, either. Same issue: there are way more edge cases than you might think. Do get a dedicated CVS reader. There are at least three included in the .Net framework, including TextFieldParser.

    – Joel Coehoorn
    Nov 14 '18 at 22:29








  • 2





    Possible duplicate of read csv file in vb.net

    – Slai
    Nov 14 '18 at 22:34











  • I have to agree with @JoelCoehoorn and suggest that you use a TextFieldParser. In that case, all you have to do is set the HasFieldsEnclosedInQuotes property to True and the work is done for you.

    – jmcilhinney
    Nov 14 '18 at 22:41
















  • 2





    Don't use Split() to read CSV data. The problem you ran into here with commas is only the beginning. Don't use RegEx, either. Same issue: there are way more edge cases than you might think. Do get a dedicated CVS reader. There are at least three included in the .Net framework, including TextFieldParser.

    – Joel Coehoorn
    Nov 14 '18 at 22:29








  • 2





    Possible duplicate of read csv file in vb.net

    – Slai
    Nov 14 '18 at 22:34











  • I have to agree with @JoelCoehoorn and suggest that you use a TextFieldParser. In that case, all you have to do is set the HasFieldsEnclosedInQuotes property to True and the work is done for you.

    – jmcilhinney
    Nov 14 '18 at 22:41










2




2





Don't use Split() to read CSV data. The problem you ran into here with commas is only the beginning. Don't use RegEx, either. Same issue: there are way more edge cases than you might think. Do get a dedicated CVS reader. There are at least three included in the .Net framework, including TextFieldParser.

– Joel Coehoorn
Nov 14 '18 at 22:29







Don't use Split() to read CSV data. The problem you ran into here with commas is only the beginning. Don't use RegEx, either. Same issue: there are way more edge cases than you might think. Do get a dedicated CVS reader. There are at least three included in the .Net framework, including TextFieldParser.

– Joel Coehoorn
Nov 14 '18 at 22:29






2




2





Possible duplicate of read csv file in vb.net

– Slai
Nov 14 '18 at 22:34





Possible duplicate of read csv file in vb.net

– Slai
Nov 14 '18 at 22:34













I have to agree with @JoelCoehoorn and suggest that you use a TextFieldParser. In that case, all you have to do is set the HasFieldsEnclosedInQuotes property to True and the work is done for you.

– jmcilhinney
Nov 14 '18 at 22:41







I have to agree with @JoelCoehoorn and suggest that you use a TextFieldParser. In that case, all you have to do is set the HasFieldsEnclosedInQuotes property to True and the work is done for you.

– jmcilhinney
Nov 14 '18 at 22:41














1 Answer
1






active

oldest

votes


















2














Thinks very much for the suggestions.



I am going to use textfieldparser for my import.



Using MyReader As New Microsoft.VisualBasic.FileIO.TextFieldParser(FName)
MyReader.TextFieldType = Microsoft.VisualBasic.FileIO.FieldType.Delimited
MyReader.Delimiters = New String() {","}
Dim currentRow As String()
Dim firstline As Boolean = True
While Not MyReader.EndOfData
Try
currentRow = MyReader.ReadFields()
If firstline = True Then
firstline = False
Else
Me.DataGridView1.Rows.Add(currentRow)
End If
Catch ex As Microsoft.VisualBasic.FileIO.MalformedLineException
MsgBox("Line " & ex.Message & " is invalid. Skipping")
End Try
Application.DoEvents()
End While
End Using





share|improve this answer























    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53309471%2fworking-with-commas-in-a-comma-delimited-file%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    2














    Thinks very much for the suggestions.



    I am going to use textfieldparser for my import.



    Using MyReader As New Microsoft.VisualBasic.FileIO.TextFieldParser(FName)
    MyReader.TextFieldType = Microsoft.VisualBasic.FileIO.FieldType.Delimited
    MyReader.Delimiters = New String() {","}
    Dim currentRow As String()
    Dim firstline As Boolean = True
    While Not MyReader.EndOfData
    Try
    currentRow = MyReader.ReadFields()
    If firstline = True Then
    firstline = False
    Else
    Me.DataGridView1.Rows.Add(currentRow)
    End If
    Catch ex As Microsoft.VisualBasic.FileIO.MalformedLineException
    MsgBox("Line " & ex.Message & " is invalid. Skipping")
    End Try
    Application.DoEvents()
    End While
    End Using





    share|improve this answer




























      2














      Thinks very much for the suggestions.



      I am going to use textfieldparser for my import.



      Using MyReader As New Microsoft.VisualBasic.FileIO.TextFieldParser(FName)
      MyReader.TextFieldType = Microsoft.VisualBasic.FileIO.FieldType.Delimited
      MyReader.Delimiters = New String() {","}
      Dim currentRow As String()
      Dim firstline As Boolean = True
      While Not MyReader.EndOfData
      Try
      currentRow = MyReader.ReadFields()
      If firstline = True Then
      firstline = False
      Else
      Me.DataGridView1.Rows.Add(currentRow)
      End If
      Catch ex As Microsoft.VisualBasic.FileIO.MalformedLineException
      MsgBox("Line " & ex.Message & " is invalid. Skipping")
      End Try
      Application.DoEvents()
      End While
      End Using





      share|improve this answer


























        2












        2








        2







        Thinks very much for the suggestions.



        I am going to use textfieldparser for my import.



        Using MyReader As New Microsoft.VisualBasic.FileIO.TextFieldParser(FName)
        MyReader.TextFieldType = Microsoft.VisualBasic.FileIO.FieldType.Delimited
        MyReader.Delimiters = New String() {","}
        Dim currentRow As String()
        Dim firstline As Boolean = True
        While Not MyReader.EndOfData
        Try
        currentRow = MyReader.ReadFields()
        If firstline = True Then
        firstline = False
        Else
        Me.DataGridView1.Rows.Add(currentRow)
        End If
        Catch ex As Microsoft.VisualBasic.FileIO.MalformedLineException
        MsgBox("Line " & ex.Message & " is invalid. Skipping")
        End Try
        Application.DoEvents()
        End While
        End Using





        share|improve this answer













        Thinks very much for the suggestions.



        I am going to use textfieldparser for my import.



        Using MyReader As New Microsoft.VisualBasic.FileIO.TextFieldParser(FName)
        MyReader.TextFieldType = Microsoft.VisualBasic.FileIO.FieldType.Delimited
        MyReader.Delimiters = New String() {","}
        Dim currentRow As String()
        Dim firstline As Boolean = True
        While Not MyReader.EndOfData
        Try
        currentRow = MyReader.ReadFields()
        If firstline = True Then
        firstline = False
        Else
        Me.DataGridView1.Rows.Add(currentRow)
        End If
        Catch ex As Microsoft.VisualBasic.FileIO.MalformedLineException
        MsgBox("Line " & ex.Message & " is invalid. Skipping")
        End Try
        Application.DoEvents()
        End While
        End Using






        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 14 '18 at 22:50









        Road KingRoad King

        92210




        92210
































            draft saved

            draft discarded




















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53309471%2fworking-with-commas-in-a-comma-delimited-file%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            Bressuire

            Vorschmack

            Quarantine