【问题标题】:Split big file where lines are separated by semicolon and split parts can contain semicolon inside quotes [duplicate]拆分大文件,其中行用分号分隔,拆分部分可以在引号内包含分号[重复]
【发布时间】:2013-08-13 19:55:54
【问题描述】:

我需要将行拆分成一个大文件 (200MB-5GB) 中的部分,其中行看起来像这样

value1;value2;"value3;extra";value4;"value5;extra"

行需要用分号分隔。常规 String.Split 不起作用,因为分号可以在引号内。

我认为正则表达式在这里效果最好,特别是如果文件有数百万行。我感谢任何可以帮助我拆分的指导或代码。

更新:

我想看到上面示例行的结果是

value1
value2
"value3;extra"
value4
"value5;extra"

谢谢

【问题讨论】:

  • string.split 会起作用,我想它不会符合您的所有期望。请提供一个示例,说明您希望输出线的外观。此外,您可能希望使用术语“分号”而不是“半列”。
  • 您能否逐行处理此文件,还是将其显示为数据块?
  • 你能把"'s 去掉之前的分割吗?
  • @AdrianWragg 我有整个文件可用
  • @Yoztastic 引号是我需要保留的价值的一部分

标签: c# regex


【解决方案1】:

添加对Microsoft.VisualBasic 的引用并使用TextFieldParser 类:

using System;
using System.IO;
using Microsoft.VisualBasic.FileIO;

class Program
{
    static void Main(string[] args)
    {
        using(var input = File.OpenRead("input.txt"))
        using(var tfp = new TextFieldParser(input))
        {
            tfp.SetDelimiters(new string[] { ";" });
            tfp.HasFieldsEnclosedInQuotes = true;
            var fields = tfp.ReadFields();
            foreach (var field in fields)
            {
                Console.WriteLine(field);
            }
        }
    }
}

【讨论】:

  • 谢谢你,谢谢你的回答
  • 管理员注意:我没想到会得到这么多反对意见:)
  • @AlexS:请注意,您的示例数据表明您正在使用引用字符 "。因此设置HasFieldsEnclosedInQuotes = true。另外,使用using 语句(相应地编辑了亚历克斯的答案)。顺便说一句,Stackoverflow 由其用户管理(具有足够的声誉)。
  • 谢谢@TimSchmelter。
猜你喜欢
  • 1970-01-01
  • 2013-10-05
  • 2017-06-19
  • 2011-09-08
  • 2011-07-26
  • 1970-01-01
  • 2010-10-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多