Sql SSIS,从一个CSV文件导入多个数据集
我得到了一组csv文件和两个数据集,它们都不是固定长度的。谁能建议我如何从文件中提取数据集,并将它们导入SQL中的单独表中 文件格式为Sql SSIS,从一个CSV文件导入多个数据集,sql,csv,ssis,Sql,Csv,Ssis,我得到了一组csv文件和两个数据集,它们都不是固定长度的。谁能建议我如何从文件中提取数据集,并将它们导入SQL中的单独表中 文件格式为 17行标题信息 “摘要”一词 第一节的列标题 第一节*多行 空行 “细节”一词 第二节的列标题 第二节*多行 已编辑 如果有人想做实验,我假设文件是这样的: blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah
- 17行标题信息
- “摘要”一词
- 第一节的列标题
- 第一节*多行
- 空行
- “细节”一词
- 第二节的列标题
- 第二节*多行
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
如果您可以使用
awk
,则此脚本将执行此操作:
awk 'BEGIN{out=""}/SUMMARY/{out="1.csv";next}/DETAIL/{out="2.csv";next}/^$/{out="";next} length(out){print > out}' file
在开始时,它将输出文件名设置为nothing。然后,如果它看到单词“SUMMARY”,它将输出文件名设置为“1.csv”。如果它看到单词“DETAIL”,则将输出文件名设置为“2.csv”。在其他行中,它检查输出文件是否已指定,如果已指定,则写入
您的两个部分将以“1.csv”和“2.csv”结尾。脚本完全不依赖于行数,只依赖于单词“摘要”和“详细信息”。基于Marks的建议,我构建了这个脚本作为我的第一个剪切脚本任务。它需要添加摘要部分,但这很容易。(脚本化任务对象c#)
}导入数据之前是否可以拆分为2个文件?现在可以,但我需要完全自动化该过程,然后我将无法手动拆分文件。如果SSIS中有一种方法可以将文件分开,我希望您不介意我的编辑来澄清。您可以使用脚本任务来完成这项工作,只要您确定结构是相同的,而不考虑每个部分的行数。我不使用awk。然而,这一点和上面的评论让我进入了c#script领域,有了这一点来指导我,似乎给了我一个可行的脚本!在第一个while循环中也是infie.EndOfStream-以防万一有一天你没有得到详细的部分。
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;
}
}