使用分隔符拆分字符串但异常

时间:2017-10-19 03:37:34

标签: c# string

我有一个如下所示的文本文件。

AIR NEW ZEALAND LIMITED,AIZ,Transportation

" AIRXPANDERS,INC。",AXP,医疗保健设备&服务

ALARA RESOURCES LIMITED,AUQ,Materials

ALCHEMIA LIMITED,ACL," Pharmaceuticals,Biotechnology&生命科学"

ALCHEMY RESOURCES LIMITED,ALY,Materials

它有三列,总是用逗号分隔。但是有一些例外,内容本身包含逗号。该文件已将这些引入一对引号。

如何使用String.Split方法方便地读出列并处理这些异常?

干杯 籍

2 个答案:

答案 0 :(得分:1)

不使用拆分字符串,而是使用regular expressionCREATE TABLE t ( Recordid INT, Price INT, "Start date" DATE, "end date" DATE ); INSERT INTO t VALUES (1, 20, TO_DATE('2017-10-01', 'YYYY-MM-DD'), TO_DATE('2017-10-02', 'YYYY-MM-DD')); INSERT INTO t VALUES (2, 20, TO_DATE('2017-10-03', 'YYYY-MM-DD'), TO_DATE('2017-10-04', 'YYYY-MM-DD')); INSERT INTO t VALUES (3, 30, TO_DATE('2017-10-05', 'YYYY-MM-DD'), TO_DATE('2017-10-05', 'YYYY-MM-DD')); INSERT INTO t VALUES (4, 20, TO_DATE('2017-10-06', 'YYYY-MM-DD'), TO_DATE('2017-10-07', 'YYYY-MM-DD')); INSERT INTO t VALUES (5, 20, TO_DATE('2017-10-08', 'YYYY-MM-DD'), TO_DATE('2017-10-09', 'YYYY-MM-DD')); INSERT INTO t VALUES (6, 20, TO_DATE('2017-10-10', 'YYYY-MM-DD'), TO_DATE('2017-10-11', 'YYYY-MM-DD')); 函数提取匹配项。

例如:

Matches

输出:

var input = @"Column1,Column2,""Column,4"",Column4";
var expression = @"""[^""]*""|[^,]+";
var results = Regex.Matches(input, expression);
foreach (var s in results)
{
    Console.WriteLine(s);
}

答案 1 :(得分:0)

这看起来像CSV格式。 Import-Csv应该做到这一点:

$data = Import-Csv -Path your-data.txt -Delimiter ","

Import-Csv假设第一行包含列标题。如果不是,您可以使用-Header开关定义标题名称(即-Header:"col1","col2","col3")。