如果你有一些 c# 编码经验,我会推荐一个脚本任务。我在解析一些许可证文件时遇到了同样的问题,这似乎是正确解析更复杂文件的唯一方法。
如果您执行脚本任务,您可以完全绕过平面文件连接。下面简要介绍如何:
首先将一个字符串参数添加到您的包中。在您的脚本任务选项中,将您的参数添加为只读变量。然后使用此代码段访问它
byte[] empty = new byte[] { };
base.PreExecute();
//Outside parameter for file path
//Check for the parameter existance
IDTSVariable100 filePathVariable; //This is the var that will hold the parameter
try
{
filePathVariable = this.ReadOnlyVariables["ParameterName"];
}
catch (Exception)
{
this.Log(@"The package configuration is invalid. The variable / parameter ""ParameterName"" is missing.
It has to be available and be of type string and give the path to the file to be Imported", 0, empty);
throw;
}
string filePath = filePathVariable.Value.ToString();
现在使用这样的东西来读取文件并将其分成几行..
try
{
using (StreamReader reader = new StreamReader(filePath))
{
//Read file and split into lines
string fileStream = reader.ReadToEnd();
fileLines = fileStream.Split('\n');
}
}
catch (Exception e)
{
this.Log(@"Error reading file into list of strings. Reason: " + e.Message, 0, empty);
throw;
}
将以上所有内容放在脚本任务的 PreExecute 部分以及您想要对每一行进行的任何转换。然后创建一个数组或行列表并像这样输出:
public override void CreateNewOutputRows()
{
for (int i = 0; i < lineCount; i++)
{
ItemsBuffer.AddRow();
ItemsBuffer.ColumnName = CreatedLineList[i];
}
}
如果您对此有任何疑问,请告诉我