Поэтому мне нужно исправить файл, в котором даты были в формате мм / дд / гггг, а даты, необходимые для пакета служб SSIS для их обработки, в форме ммддйййй (с 03/11/2020 по 03112020 ). Затем в SSIS есть компонент, который превращает строку в mm-dd-гггг, который понимает SQL (я не проектировал пакет, мне просто нужно работать с ним как есть)
Файл является CSV-файл загружается службами SSIS в серверную базу данных SQL.
Чтобы исправить файл, я подумал использовать Regex
private static readonly string basePath = @"C:\Desktop\errorfiles\";
private static readonly Regex dateMatcher = new Regex(@"(\d{2}\/\d{2}\/\d{4})");
static void Main(string[] args)
{
string[] paths = {
"file1.csv",
"file2.csv",
"file3.csv"
};
foreach(string path in paths)
{
using (var sr = new StreamReader(basePath + path))
using (var sw = new StreamWriter(basePath + @"final\" + path))
{
string line;
while ((line = sr.ReadLine()) != null)
{
var matches = dateMatcher.Matches(line);
foreach (Match match in matches)
{
var dateParts = match.Value.Split('/');
string dateStr = String.Empty;
foreach (string part in dateParts)
{
dateStr += part;
}
line = dateMatcher.Replace(line, dateStr, 1, match.Index);
}
sw.WriteLine(line);
}
}
}
}
Моя первая попытка была с dateMatcher.Replace(line, dateStr)
, что Выглядело нормально, пока я не проверил более внимательно новый файл и не увидел, что даты вышли из строя по сравнению с исходным файлом. Поэтому я попробовал этот маршрут, где он заменил бы только в том месте, где было найдено совпадение, что вызвало еще одну проблему. В тех случаях, когда дата была одинаковой, он заменял ее только в одном месте.
Так, например:
имя, дата-дата обслуживания, -дота обслуживания , дата рождения
Боб, 03/11/2020,03 / 11 / 2020,07 / 02/1987
станет
Боб, 03112020,03 / 11 / 2020,07021987
Но я бы хотел, чтобы оба стали 03112020
, и если я изменю параметр count
в dateMatcher.Replace
на -1
, он заменит КАЖДУЮ дату в строке, например:
Боб, 03112020,03112020,03112020
Что также неверно, поскольку в столбце даты рождения изменяется значение, и это нежелательно.
Есть ли способ специально заменить каждую дату, соответствующую регулярному выражению, только в том месте, где она появляется, и также заменить там, где есть значения, совпадающие с этой датой? Прошу прощения, если это звучит запутанно, но не легко поставить вопрос.