Как игнорировать символ в методе разделения - PullRequest
0 голосов
/ 21 июня 2011

Мой файл содержит данные в этом формате:

Name,Sal,Address,Location
Mike,"£10,732",xxxxxx,GBR
Bob,"£6,450",xxxxxxx,Fra
Arthur,"£8,320",xxxxx,Spa
James,"£7,423",xxxxxxxxxxxx,IRE

Мне нужно прочитать эти данные в массив строк.В моем новом файле мне нужно написать только столбцы Name, Sal и Location.Вот мой код:

    Dim ioReader As New System.IO.Streamreader("C:\old.csv")
    ioLines="Name,Sal,Location"
    Dim ioWriter As New System.IO.StreamWriter("C:\new.csv")
    While Not ioLine = ""
        ioLine = ioFile.ReadLine
        Dim values As String()
        If ioLine <> "" Then
            values = ioLine.Split(",")
            Dim outPut as string=values(0) & values(1) & values(3)
            ioLines += System.Environment.NewLine & outPut
        EndIf

Когда я делю вышеупомянутые данные, значения столбца sal, которые уже содержат ",", разделяются на 2 ячейки.Я хочу сохранить значение столбца sal как одну ячейку, игнорируя "," между числами.Любые предложения, пожалуйста?

Ответы [ 3 ]

2 голосов
/ 21 июня 2011

Похоже, вы анализируете CSV, если да, вы можете использовать

Microsoft.VisualBasic.FileIO.TextFieldParser

, например

Using MyReader As New Microsoft.VisualBasic.FileIO.
    TextFieldParser("c:\logs\bigfile")
MyReader.TextFieldType = 
    Microsoft.VisualBasic.FileIO.FieldType.Delimited
MyReader.Delimiters = New String() {","c}
        MyReader.HasFieldsEnclosedInQuotes = True
Dim currentRow As String()
'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
End Using
1 голос
/ 21 июня 2011

Быстрое и грязное решение:

Dim outPut as string=values(0) & values(1) & "," & values(2) & values(5)

Входной файл неправильный CSV - поля с , должны быть экранированы (окружены "):

Name,Sal,Address,Location
Mike,"£10,732",xxxxxx,GBR
Bob,"£6,450",xxxxxxx,Fra
Arthur,"£8,320",xxxxx,Spa
James,"£7,423",xxxxxxxxxxxx,IRE

И я бы не использовал string.Split, но анализатор CSV - вы могли бы использовать TextFieldParser класс.

0 голосов
/ 21 июня 2011

Еще один быстрый и грязный ...

using System.Text.RegularExpressions;

private void Test(){
    Regex rex = new Regex(@"(?<!£\d*),");
    string[] s = rex.Split(@"Name,Sal,Address,Location Mike,£10,732,xxxxxx,GBR Bob,£6,450,xxxxxxx,Fra Arthur,£8,320,xxxxx,Spa James,£7,423,xxxxxxxxxxxx,IRE");
}

Регулярное выражение не будет разделяться запятой, перед которой стоит знак решетки и цифры.Однако это позволит использовать только одну запятую в валюте, поэтому £10,342,234 сломает ее ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...