SSIS脚本任务获取csv文件的行数

Posted

技术标签:

【中文标题】SSIS脚本任务获取csv文件的行数【英文标题】:SSIS Script Task get row count of csv files 【发布时间】:2020-11-16 19:10:40 【问题描述】:

我正在使用 VS 2012 \ SQL SSIS。如何检索 csv 文件中记录的行数并将它们分配给变量 (RowCount) 以供稍后在流程中使用?我还需要从计数中排除 1,因为这将是列标题。

但是,我不能只使用数据流任务、OLE 源然后是行数,因为我不知道文件名(或 csv 的标题)。我所知道的是至少会有行标题。到目前为止,我有一个 FOR EACH LOOP 容器,它查看特定文件夹,然后将文件名分配给变量“FileNameFound”。如何配置脚本任务,然后将 RowCount 分配给变量“RowCount”?

到目前为止,在我的脚本任务 (C#) 中,我已经尝试了以下内容,只是为了使用消息框进行测试

public void main()

        string strPath = Dts.Variables["FileNameFound"].Value.ToString();
        string[] strArr = File.ReadAllLines(strPath);
        //MessageBox.Show(strArr[0]);
        MessageBox.Show("Total Records " + strArr.Length.ToString());

        Dts.TaskResult = (int)ScriptResults.Success;

如何将计数的记录分配给 SSIS 变量“RowCount”?

【问题讨论】:

在您的脚本任务代码中放置一个断点以了解发生了什么 - 不要使用MessageBox 进行调试。 strArr.Length-1 您真的需要计算所有行,还是只需要知道在初始标题行之外至少有一行?如果您有一个非常大的文件,ReadAllLines 可能会消耗所有可用内存,尤其是在您的机器配置不佳的情况下。 另外,我被I cannot just use a Data Flow Task, OLE Source then a Row Count as I do not know the filenames 弄糊涂了,你能帮我理解一下声明中的限制吗? 【参考方案1】:

如何在脚本任务中为 SSIS 变量赋值?

假设您在脚本任务配置页面中有一个名为 @[User::RowCount] 的变量,它有一个位置来标识变量的只读集合以及读/写变量集合。将此添加到 ReadWrite 集合中。

在您的实际代码中,您会将计算出的行数分配给 SSIS 变量的 .Value 属性。

Dts.Variables["RowCount"].Value = strArr.Length -1;

【讨论】:

以上是关于SSIS脚本任务获取csv文件的行数的主要内容,如果未能解决你的问题,请参考以下文章

python中CSV文件的行数错误

如何创建SSIS脚本任务以从平面文件中删除CR LF

Pyspark 的 sqlContext.read.csv() 函数读取的行数比实际 .csv 文件中的行数多

SSIS:来自 csv 文件的数据问题:

PowerShell:如何计算 csv 文件中的行数?

如何从ssis中的多个文件夹中删除旧的csv文件