简单的方法是使用派生列转换。您可以使用
SUBSTRING(«character_expression», «start», «length»)
如果您的列的长度是静态的。您的日期的一个例子是:
SUBSTRING(INPUTColumn,3(列开始的字符数),10(列的大小))
如果您的列的大小不同,那么我将使用脚本任务来拆分字符串并自己格式化信息。如果您需要,我可以提供一些示例代码。
编辑:我再次查看了您的样本,此时我假设您的 cloumn 大小是动态的。如果是这样,最好的方法是使用脚本任务。然后,如果添加“|”,则可以使用 .split() 将行拆分为数组 和 " " 以及要拆分的参数将从原始字符串中删除。然后,您可以格式化您的数据并将其输出到您的数据库。
第一步是在 ssis 中创建一个字符串参数。它的值应该是你的文件路径。然后将Source Script 任务添加到您的数据流中。在自定义属性下的编辑器中将该参数添加到readOnlyVariables
然后像这样打开文件:
byte[] empty = new byte[] { };
//Outside parameter for the ssisparameter file path
//Check for the parameter existance
IDTSVariable100 filePathVariable;
try
{
filePathVariable = this.ReadOnlyVariables["ParameterName"];
}
catch (Exception )
{
}
string filePath = filePathVariable.Value.ToString();
这会将您的文件拆分为一组行。
private String[] fileLines;
using (StreamReader reader = new StreamReader(filePath))
{
//Read file and split into lines
string fileStream = reader.ReadToEnd();
fileLines = fileStream.Split('\n');
}
使用您要使用的所有分隔符创建一个这样的数组。
private char[] delimiters = { ' ', ':', '\n', '\\', '=' };
然后使用这样的方式循环遍历你的行:
string[] Tokens = fileLines[index].Split(delimiters);
以上所有内容都应包含在脚本任务的 preExecute 部分中。这里的想法是将所有信息分成单独的列表,这些列表将代表列(因此是日期列表和值列表)。
在您的脚本任务编辑器中,您可以将列添加为输出。然后将其添加到脚本的输出部分:
for (int i = 0; i < lineCount; i++)
{
outputBuffer.AddRow();
outputBuffer.date = dateList[i];
outputBuffer.value = valueList[i];
}