拆分包含意外字符和格式不一致的源文件的问题

时间:2015-12-09 00:28:29

标签: c# csv split

我有以下包含“|”的txt文件分隔器。我想读取文件并将其输出到csv文件中。

n

但是从第3行和第5行可以看出格式不一致。用户添加了额外的“|”公司名称。如何编写将上述内容复制到csv文件中的C#脚本,该文件将产生以下结果。我正在努力的一点是第3行和第5行。

Date|Currency|Location|Company|Price 
11112012|GBP|London|EasyJet|200.00
12122012|GBP|Manchester|British|Airways|100.00
10102014|EUR|Frankfurt|Lufthansa|300.00
10102014|EUR|Paris|Air|France|500.00

帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

首先,清理数据。伪代码:

List<String> cleansedFile = new List<String>();
int pipeCount;
foreach (String line in textFile)
{
    pipeCount = // count how many pipes are in the line
    if (pipeCount == 5)
    {
        String s = // replace fourth pipe with a space
    }
    cleansedFile.Add(s);
}
cleansedFile.SaveToFile("cleanFile.txt"); 

然后您可以按照需要继续(使用一致/可靠的行)。

同样,这提供了总共四到五个管道;如果有时候或多或少,那会使问题复杂化。

更新

也许更好的方法是将管道上的线分成一个数组,这样就可以得到如下数组:

[0] = 11112012
[1] = GBP // Green Bay Packers, I take it
[2] = London
[3] = EasyJet
[4] = 200.00

[0] = 12122012
[1] = GBP
[2] = Manchester
[3] = British
[4] = Airways
[5] = 100.00

然后,如果有6个元素而不是5个元素,则可以重新组合这些值,连接元素3和4;类似的旋转可以用于其他场景。

答案 1 :(得分:0)

你可以用正则表达式做到这一点; e.g。

using System.Text.RegularExpressions;
class Program
{
    static void Main(string[] args)
    {
        string[] data = new string[]{"Date|Currency|Location|Company|Price","11112012|GBP|London|EasyJet|200.00","12122012|GBP|Manchester|British|Airways|100.00","10102014|EUR|Frankfurt|Lufthansa|300.00","10102014|EUR|Paris|Air|France|500.00"};
        Regex splitter = new Regex("([^|]+)|([^|]+)|([^|]+)|(.+)|([^|]+)");

        int lineNo = 0;
        foreach (var line in data)
        {
            lineNo++;
            int fieldNo = 0;
            foreach (var value in splitter.Matches(line))
            {
                fieldNo++;
                Console.WriteLine(string.Format("Line {0:00} Column: {1:00}: Value: {2}", lineNo, fieldNo, value.ToString()));
            }
        }
        Console.WriteLine("Done");
        Console.ReadKey();
    }