Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.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# 添加Case语句替换C中的函数#_C#_Ssis_Script Task - Fatal编程技术网

C# 添加Case语句替换C中的函数#

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

首先,我不是一个c#人,所以请在这一点上容忍我。 我需要在SSIS中的脚本任务中将出现的“D:”替换为“D$”。我确实使用了replace函数来实现这一点,但问题是,这会在另一行上产生意外的后果

例如,脚本任务发送一封电子邮件,电子邮件的标题为\servername\d$\further\u path。电子邮件正文为“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行

当我使用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));