从到的子字符串



我正在开发SSIS(2017(解决方案,从以下3个excel文件名读取和加载数据:

message_EDF_100420202.csv
message_UltaBIO_10042020.csv
message_SEIDV_10042020.csv

我需要做的是只获得EDF或UltraBIO或SEIDV作为新列(派生列任务(

因此,我需要一些帮助来正确设置派生列任务中的子字符串函数。

有什么建议吗?

您的模式似乎是message_Stuff-I-Want_junk(实际模式中不存在空格(。它由下划线分隔,并且由于起始文本是常量,这使生活更轻松。

创建一个名为MessageLessName 的新列

删除带有表达式的message_部分

REPLACE([SourceFile], "message_", "")

现在,我们想取最左边的N个字符,其中N对应于新列MessageLessName中下划线的位置。为了便于调试,我建议您将第二个派生列任务添加到第一个派生列的输出中(我们在其中定义了MessageLessName(。在这里,我们将创建FirstUndercore列

findstring([MessageLessName], "_", 1)

最后,我们将添加第三个派生列任务,在中,我们将获得最终文件名。

LEFT([MessageLessName], [FirstUnderscore])

现在,由于我的懒惰,这可能会被逐一取消,但因为你可以检查一路上的每一步,你可以验证MessageLessName是否正是你认为应该是的,并且FirstUndercore是我们MessageLessName列中的N个字符。

使用Split脚本组件。

Row.ColumnName.ToString().Split('_')[1];
  1. 您正在获取列值并强制转换为字符串。(当前值为整个字符串(
  2. 接下来是基于"_"进行拆分(当前值是由三个字符串组成的数组(
  3. 最后取第二个值(基于0((当前值是您想要的字符串(

这里有一个小奖励。同时获取日期:

string[] breakdown = Row.fileNames.Split('_');
Row.Type = breakdown[1];
string dateToFix = breakdown[2].Replace(".csv", "");
Row.Date = DateTime.Parse(dateToFix.Substring(0,2) +"/" 
+ dateToFix.Substring(2,2) + "/" + dateToFix.Substring(4,4));

最新更新