.net 如何在拆分方法中忽略字符

.net 如何在拆分方法中忽略字符,.net,vb.net,string,.net,Vb.net,String,我的文件包含以下格式的数据: 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.Streamr

我的文件包含以下格式的数据:

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
Dim ioReader作为新System.IO.Streamreader(“C:\old.csv”)
ioLines=“名称、Sal、位置”
Dim ioWriter作为新的System.IO.StreamWriter(“C:\New.csv”)
而不是ioLine=“”
ioLine=ioFile.ReadLine
将值设置为字符串()
如果是“ioLine”,那么
值=ioLine.Split(“,”)
将输出变暗为字符串=值(0)&值(1)&值(3)
ioLines+=System.Environment.NewLine和outPut
恩迪夫

当我拆分上述数据时,已经包含“,”的sal列值将拆分为2个单元格。我希望通过忽略数字之间的“,”将sal列值保持为单个单元格。有什么建议吗?

快速肮脏的解决方案:

Dim outPut as string=values(0) & values(1) & "," & values(2) & values(5)
输入文件不是正确的CSV-应转义带有
的字段(用
包围):


我不会使用
string.Split
,而是使用CSV解析器-您可以使用该类。

快速而肮脏的解决方案:

Dim outPut as string=values(0) & values(1) & "," & values(2) & values(5)
输入文件不是正确的CSV-应转义带有
的字段(用
包围):


我不会使用
string.Split
,而是使用CSV解析器-您可以使用该类。

另一个快速而肮脏的

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");
}
使用System.Text.regular表达式;
专用无效测试(){

Regex rex=新的Regex(@“(?另一个又快又脏的

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");
}
使用System.Text.regular表达式;
专用无效测试(){

Regex rex=new Regex(@“(?看起来您正在解析CSV,如果是,您可以使用

Microsoft.VisualBasic.FileIO.TextFieldParser
e、 g


看起来您正在解析CSV,如果是,您可以使用

Microsoft.VisualBasic.FileIO.TextFieldParser
e、 g


源文件格式不正确。是否可以更改源文件?更准确地说,您必须在
分隔符为了避免内部的
被视为分隔符。您还必须更新代码来处理CSV无效的字符串分隔符。它应该转义到
Mike,“£10732”,xxxxxx,GBR
-否则它是不明确的。如果我有10英镑,在下一列(不相关)怎么办我的值是723?或者你也可以使用固定宽度的列,如果你可以更改源文件的话。这更容易解析,因为你可以使用子字符串,而不是在文件中查找标记。我不应该格式化源文件。我的输出文件应该看起来你应该明白,这不是一个CSV文件e格式不正确。是否可以更改源文件?更准确地说,您必须将字符串包装在
分隔符之间,以避免内部
被视为分隔符。您还必须更新代码以处理CSV无效的字符串分隔符。它应该转义到
Mike,”10732英镑,xxxxxx,GBR
-否则就不明确了。如果我有10英镑,下一栏(无关)怎么办我的值是723?或者你也可以使用固定宽度的列,如果你可以更改源文件的话。这更容易解析,因为你可以使用子字符串,而不是在文件中查找标记。我不应该格式化源文件。我的输出文件应该看起来你应该明白,这不是CSV文件。