C# 添加Case语句替换C中的函数#
首先,我不是一个c#人,所以请在这一点上容忍我。 我需要在SSIS中的脚本任务中将出现的“D:”替换为“D$”。我确实使用了replace函数来实现这一点,但问题是,这会在另一行上产生意外的后果 例如,脚本任务发送一封电子邮件,电子邮件的标题为\servername\d$\further\u path。电子邮件正文为“UID:1:MESSAGE” 发送电子邮件的代码行如下所示:C# 添加Case语句替换C中的函数#,c#,ssis,script-task,C#,Ssis,Script Task,首先,我不是一个c#人,所以请在这一点上容忍我。 我需要在SSIS中的脚本任务中将出现的“D:”替换为“D$”。我确实使用了replace函数来实现这一点,但问题是,这会在另一行上产生意外的后果 例如,脚本任务发送一封电子邮件,电子邮件的标题为\servername\d$\further\u path。电子邮件正文为“UID:1:MESSAGE” 发送电子邮件的代码行如下所示: myHtmlMessage = new MailMessage(Dts.Variables["MailFromAddr
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行
当我使用replace函数时,主体线也会受到d$符号的影响,这就是我试图避免的。我可以用C#编写一个条件替换函数吗?或者,还有其他方法来处理这个问题吗
谢谢,
RV.您研究过正则表达式吗 下面是一个你将如何使用它的例子。。。请注意,我还没有测试它以确定它是否完全正常工作,但它应该可以帮助您开始以下工作: 例如 我希望这有助于
注意-您可以在上了解有关正则表达式语法的更多信息。如果您想了解这些引擎是如何工作的,它们可能会有什么不同,以及在特定上下文中查找特定表达式时使用的最佳语法,那么就值得深入研究。以下内容可能会帮助您了解:
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));
您是否可以将您的编码添加到问题中?您是否也可以添加带有字符串的输入和输出示例(预期和接收)-您的问题不完全可以理解您是否有示例输入正文?我提供的示例不处理单词中的D:(例如,“\\ServerNameD:\foo”不会被正则表达式解析器识别)。从技术上讲,没有这样的输入体。所有变量值都是从包中动态收集的。但需要的是在日志文件夹行中仅用D$替换D:而不是整个正文中的其他位置。不-我没有测试任何代码-它旨在指导OP,而不是为他做工作。您的代码不起作用。如果您正在提供示例,请添加如何操作的说明,而不是给出代码,说明此处是,例如,并且它不起作用,@S.Petrosov-很好的建议。我已编辑(并修复了一些代码),以便更容易理解其上下文。让我快速尝试该建议,然后返回给您。这似乎并没有取代日志文件夹行上的D:。例如,服务器名为abc123D:本应为abc123D$…但到目前为止仍为abc123D:
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));