Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
消除不需要的回车的正则表达式在C#脚本任务中太慢_C#_Regex_Ssis - Fatal编程技术网

消除不需要的回车的正则表达式在C#脚本任务中太慢

消除不需要的回车的正则表达式在C#脚本任务中太慢,c#,regex,ssis,C#,Regex,Ssis,我有一个.csv文件,其中有一个评论栏。此列包含某些行的回车符和换行符。因此,加载过程失败(正在通过SSIS包加载)。 我添加了一个脚本任务,以从文件中删除不需要的回车符和换行符(保留每行末尾的回车符和换行符) 我使用下面的代码来做这件事。我面临的问题是,对于一个小文件,代码运行得很好,但是对于一个大文件,代码运行的时间太长(对于37k记录,其结构如所附的示例文件所示,超过1小时) 我对C#脚本非常陌生,因此无法优化脚本任务中使用的正则表达式。 有没有更好的方法来编写正则表达式以使其运行更快 正

我有一个.csv文件,其中有一个评论栏。此列包含某些行的回车符和换行符。因此,加载过程失败(正在通过SSIS包加载)。 我添加了一个脚本任务,以从文件中删除不需要的回车符和换行符(保留每行末尾的回车符和换行符)

我使用下面的代码来做这件事。我面临的问题是,对于一个小文件,代码运行得很好,但是对于一个大文件,代码运行的时间太长(对于37k记录,其结构如所附的示例文件所示,超过1小时)

我对C#脚本非常陌生,因此无法优化脚本任务中使用的正则表达式。 有没有更好的方法来编写正则表达式以使其运行更快

正在使用的代码:

string myFileData;

string FilePath = Dts.Variables["FilePath"].Value.ToString(); //source file path
string DestinationFilePath = Dts.Variables["DestinationFilePath"].Value.ToString(); //destination file path

const string delimeters = @"\s(?!(([^""]*""){2})*[^""]*$)"; //string pattern to be used in regular expression

myFileData = File.ReadAllText(FilePath);

if (Regex.IsMatch(myFileData, delimeters))
{
    File.WriteAllText(DestinationFilePath, Regex.Replace(myFileData, delimeters, " "));
}
样本数据:

    Seminar,Seminar Date,Location,First name,Last name,Comments
    Test Seminar,13/10/2014,Sydney,TEST1_FN,TEST1_LN,This is Test1
    Test Seminar,13/10/2014,Sydney,TEST2_FN,TEST2_LN,This is Test2
    Test Seminar,13/10/2014,Sydney,TEST3_FN,TEST3_LN,This is Test3
    Test Seminar,13/10/2014,Sydney,TEST4_FN,TEST4_LN,"This

is

    Test4"
    Test Seminar,13/10/2014,Sydney,TEST5_FN,TEST5_LN,This is Test5

声明您的正则表达式ad字段并设置编译选项:

_regex = new Regex(@"\s(?!(([^""]*""){2})*[^""]*$)", RegexOptions.Compiled);
并使用它:

_regex.Replace(myFileData, " ");
会快一点。
另外,在替换之前不要进行检查-删除
if
语句,因为
replace
也会执行此操作。

声明正则表达式ad字段并设置编译选项:

_regex = new Regex(@"\s(?!(([^""]*""){2})*[^""]*$)", RegexOptions.Compiled);
并使用它:

_regex.Replace(myFileData, " ");
会快一点。
另外,在替换之前不要检查-删除您的
if
语句,因为
replace
也会这样做。

谢谢。尽管性能有所提高,但处理这些记录(从一个多小时前开始)仍需要大约35-45分钟。我添加了if语句,以确保整个replace代码仅适用于包含这些数据的文件。对于正确的文件,不应运行替换位。如果我删除If语句,它是否会运行代码来替换每个文件的内容?@Amit of couse,在replace方法中,regex将检查是否有需要替换的内容这仍然没有带来很大的改进。我之所以使用if块,是为了确保只有在有任何记录要替换时才创建文件的“干净”副本。如果没有if子句,它将始终创建文件的副本。我更大的问题是,我们通过一个通用SSIS包加载多个文件(具有不同的文件结构)。这些文件大部分是正确的。我的修复程序应该可以快速确定文件是否需要替换。在我当前的代码中,即使是干净的文件,也需要大约15-18分钟,而不需要任何额外的回车。尽管性能有所提高,但处理这些记录(从一个多小时前开始)仍需要大约35-45分钟。我添加了if语句,以确保整个replace代码仅适用于包含这些数据的文件。对于正确的文件,不应运行替换位。如果我删除If语句,它是否会运行代码来替换每个文件的内容?@Amit of couse,在replace方法中,regex将检查是否有需要替换的内容这仍然没有带来很大的改进。我之所以使用if块,是为了确保只有在有任何记录要替换时才创建文件的“干净”副本。如果没有if子句,它将始终创建文件的副本。我更大的问题是,我们通过一个通用SSIS包加载多个文件(具有不同的文件结构)。这些文件大部分是正确的。我的修复程序应该可以快速确定文件是否需要替换。在我当前的代码中,即使是干净的文件,也需要15-18分钟,而不需要任何额外的回车符。您想替换什么?Regex不清楚您要替换什么?regex不清楚