SSIS,从一个CSV文件导入多个数据集

时间:2014-06-10 08:36:41

标签: sql csv ssis

我收到了一组包含2个数据集的csv文件,这两个数据集都不是固定长度。任何人都可以建议我如何从文件中提取数据集以将它们导入到SQL中的单独表中。

文件格式为

  • 17行标题信息
  • Word“SUMMARY”
  • 第一部分的标头
  • 第一节*多行
  • 空白行
  • Word“DETAIL”
  • 第二部分的标头
  • 第二节*多行

EDITED

如果有人想要试验,我假设文件是​​这样的:

blah 
blah 
blah 
blah 
blah 
blah 
blah 
blah 
blah 
blah 
blah 
blah 
blah 
blah 
blah 
blah 
blah 
SUMMARY
headers1
S1L1
S1L2
S1L3

DETAIL
headers2
S2L1
S2L2
S2L3

2 个答案:

答案 0 :(得分:1)

如果您可以使用awk

,则会执行此脚本
awk 'BEGIN{out=""}/SUMMARY/{out="1.csv";next}/DETAIL/{out="2.csv";next}/^$/{out="";next} length(out){print > out}' file

一开始它将输出文件名设置为空。然后,如果它看到单词“SUMMARY”,则将输出文件名设置为“1.csv”。如果它看到单词“DETAIL”,则将输出文件名设置为“2.csv”。在其他行上,它会检查输出文件是否已指定,如果是,则会写入。

您的两个部分将以“1.csv”和“2.csv”结尾。该脚本完全不依赖于行数,只是单词“SUMMARY”和“DETAIL”。

答案 1 :(得分:0)

根据Marks Suggestion,我将此作为我的第一个剪切脚本任务。它需要添加摘要部分,但这很容易。 (脚本任务对象c#)

    public void Main()
    {
        // TODO: Add your code here            
        System.IO.StreamWriter outfile = null;
        string line=null;
        string inputfile = Dts.Variables["SourceFiles"].Value.ToString();
        var infile = new System.IO.StreamReader(inputfile);
        string outpath = Dts.Variables["DetailFiles"].Value.ToString();
        int CounterPart = (int)Dts.Variables["CounterPart"].Value;
        outpath = string.Format(outpath, CounterPart++);
        outfile = new System.IO.StreamWriter(outpath);

        while (line != "Detail") {
            line = infile.ReadLine();
                    }

        while (!infile.EndOfStream)
        {
            line = infile.ReadLine();
            outfile.WriteLine(line);
        }

        outfile.Dispose();
        infile.Dispose();

        Dts.Variables["DataFile"].Value=outpath;
        Dts.Variables["CounterPart"].Value = CounterPart;

        Dts.TaskResult = (int)ScriptResults.Success;
    }
}

}