在 C# 中向 REPLACE 函数添加 Case 语句
Adding Case statement to REPLACE function in C#
首先,我不是 c# 的人,所以请多多包涵。
我需要在 SSIS 中的脚本任务中将出现的 "D:" 替换为 "d$"。我确实使用替换函数来执行此操作,但问题是,这在另一行上产生了意想不到的后果。
例如,脚本任务发出一封电子邮件,电子邮件的header 显示为\servername\d$\further_path。电子邮件的 body 显示为 "UID: 1 : MESSAGE"
发送电子邮件的代码行如下所示:
myHtmlMessage = new MailMessage(Dts.Variables["MailFromAddress"].Value.ToString(), Dts.Variables["MailRecipients"].Value.ToString(), Dts.Variables["MailSubjectSuccess"].Value.ToString(), Dts.Variables["MailBodySuccess"].Value.ToString().Replace("D:", @"\d$ "));
我得到的当前输出是:
Server Start Time: 3/21/2017 7:25:33 AM
Server End Time: 3/21/2017 7:27:39 AM
Total Run Time: 00:02:06.9402516
Log Folder: \ServerNamed$\Apps\SSIS\Logs\
UId$ 2 -
预期输出是:
Server Start Time: 3/21/2017 7:25:33 AM
Server End Time: 3/21/2017 7:27:39 AM
Total Run Time: 00:02:06.9402516
Log Folder: \ServerNamed$\Apps\SSIS\Logs\
UID: 2 -
查看日志文件夹行和 UID 行
当我使用替换函数时,body 行也会受到 d$ 符号的影响,而这正是我试图避免的。我可以在 C# 中编写有条件的 REPLACE 函数吗,或者还有其他方法可以处理这个问题吗?
谢谢,
房车
你研究过正则表达式吗?
https://msdn.microsoft.com/en-us/library/xwewhkd1(v=vs.110).aspx
这是您如何使用它的示例...请注意,我尚未对此进行测试以确定它是否完全正常工作,但它应该可以帮助您开始这条路:
例如
// Assign your strings into variables to make your code cleaner:
string fromAddress = Dts.Variables["MailFromAddress"].Value.ToString();
string recipients = Dts.Variables["MailRecipients"].Value.ToString();
string subject = Dts.Variables["MailSubjectSuccess"].Value.ToString();
string body = Dts.Variables["MailBodySuccess"].Value.ToString();
// Replace D: in body
string pattern = "(Log Folder.+)D:"; // Capture the D: only if it's on the Log Folder line.
string replacement = "\d$ "; // What we're replacing with.
Regex rgx = new Regex(pattern);
body = rgx.Replace(body, replacement);
// Build my HTML message.
myHtmlMessage = new MailMessage(fromAddress, recipients, subject, body);
希望对您有所帮助...
注意 - 您可以在 http://www.regular-expressions.info/ 了解更多关于正则表达式语法的信息。如果您想了解这些引擎的工作原理、它们的不同之处以及用于在特定上下文中查找特定表达式的最佳语法,那么值得研究一下。
这些方面的内容可能会让您到达那里:
string x = "Server Start Time: 3/21/2017 7:25:33 AM" +
"Server End Time: 3 / 21 / 2017 7:27:39 AM" +
"Total Run Time: 00:02:06.9402516" +
@"Log Folder: \ServerNameD:\Apps\SSIS\Logs\" + Environment.NewLine +
"UID: 2 - ";
int lastNewlinw = x.LastIndexOf(Environment.NewLine);
string beginning = x.Substring(0, lastNewlinw).Replace("D:", @"\d$");
string result = string.Concat(beginning, x.Substring(lastNewlinw + 1, x.Length - beginning.Length));
首先,我不是 c# 的人,所以请多多包涵。 我需要在 SSIS 中的脚本任务中将出现的 "D:" 替换为 "d$"。我确实使用替换函数来执行此操作,但问题是,这在另一行上产生了意想不到的后果。
例如,脚本任务发出一封电子邮件,电子邮件的header 显示为\servername\d$\further_path。电子邮件的 body 显示为 "UID: 1 : MESSAGE"
发送电子邮件的代码行如下所示:
myHtmlMessage = new MailMessage(Dts.Variables["MailFromAddress"].Value.ToString(), Dts.Variables["MailRecipients"].Value.ToString(), Dts.Variables["MailSubjectSuccess"].Value.ToString(), Dts.Variables["MailBodySuccess"].Value.ToString().Replace("D:", @"\d$ "));
我得到的当前输出是:
Server Start Time: 3/21/2017 7:25:33 AM
Server End Time: 3/21/2017 7:27:39 AM
Total Run Time: 00:02:06.9402516
Log Folder: \ServerNamed$\Apps\SSIS\Logs\
UId$ 2 -
预期输出是:
Server Start Time: 3/21/2017 7:25:33 AM
Server End Time: 3/21/2017 7:27:39 AM
Total Run Time: 00:02:06.9402516
Log Folder: \ServerNamed$\Apps\SSIS\Logs\
UID: 2 -
查看日志文件夹行和 UID 行
当我使用替换函数时,body 行也会受到 d$ 符号的影响,而这正是我试图避免的。我可以在 C# 中编写有条件的 REPLACE 函数吗,或者还有其他方法可以处理这个问题吗?
谢谢, 房车
你研究过正则表达式吗?
https://msdn.microsoft.com/en-us/library/xwewhkd1(v=vs.110).aspx
这是您如何使用它的示例...请注意,我尚未对此进行测试以确定它是否完全正常工作,但它应该可以帮助您开始这条路:
例如
// Assign your strings into variables to make your code cleaner:
string fromAddress = Dts.Variables["MailFromAddress"].Value.ToString();
string recipients = Dts.Variables["MailRecipients"].Value.ToString();
string subject = Dts.Variables["MailSubjectSuccess"].Value.ToString();
string body = Dts.Variables["MailBodySuccess"].Value.ToString();
// Replace D: in body
string pattern = "(Log Folder.+)D:"; // Capture the D: only if it's on the Log Folder line.
string replacement = "\d$ "; // What we're replacing with.
Regex rgx = new Regex(pattern);
body = rgx.Replace(body, replacement);
// Build my HTML message.
myHtmlMessage = new MailMessage(fromAddress, recipients, subject, body);
希望对您有所帮助...
注意 - 您可以在 http://www.regular-expressions.info/ 了解更多关于正则表达式语法的信息。如果您想了解这些引擎的工作原理、它们的不同之处以及用于在特定上下文中查找特定表达式的最佳语法,那么值得研究一下。
这些方面的内容可能会让您到达那里:
string x = "Server Start Time: 3/21/2017 7:25:33 AM" +
"Server End Time: 3 / 21 / 2017 7:27:39 AM" +
"Total Run Time: 00:02:06.9402516" +
@"Log Folder: \ServerNameD:\Apps\SSIS\Logs\" + Environment.NewLine +
"UID: 2 - ";
int lastNewlinw = x.LastIndexOf(Environment.NewLine);
string beginning = x.Substring(0, lastNewlinw).Replace("D:", @"\d$");
string result = string.Concat(beginning, x.Substring(lastNewlinw + 1, x.Length - beginning.Length));