我收到了一组包含2个数据集的csv文件,这两个数据集都不是固定长度。任何人都可以建议我如何从文件中提取数据集以将它们导入到SQL中的单独表中。
文件格式为
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
答案 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;
}
}
}