Newby在这里。我一直在慢慢地教自己如何使用SQL Server进行编程,到目前为止,该评估板一直是我学习的宝贵工具。但是,我无法解决当前的问题。
我有一个用管道分隔的大ascii文本文件。每行以记录类型开头,但是每种记录类型的编号可以不同。我有以ENCUD|
开头的行,然后是字段标题,然后是字段值。
例如:
ENCUD|CUSTOMER NAME|Smith
,接下来的几行也以ENCUD|
开头,但字段标题和字段值不同。
这些ENCUD
值出现在整个文件中,其他记录介于它们出现的位置。
我要做的是合并所有以“ ENCUD |”开头的值并分组为一行。即
ENCUD|CUSTOMER NAME|Smith
ENCUD|CUSTOMER NUMBER|12345
ENCUD|CUSTOMER ID|6789
NEW RECORD|...
NEW RECORD|...
NEW RECORD|...
ENCUD|CUSTOMER NAME|Jones
ENCUD|CUSTOMER NUMBER|23456
ENCUD|CUSTOMER ID|9876
我想发生的事情是:
ENCUD|CUSTOMER INFORMATION|Smith|12345|6789
NEW RECORD|...
NEW RECORD|...
NEW RECORD|...
ENCUD|CUSTOMER INFORMATION|Jones|23456|9876
是否可以在SQL Server中执行此操作?
答案 0 :(得分:0)
这是我解析C#中的文本以得出所需输出的方式。请记住,有很多方法可以做到这一点!
var lines = File.ReadLines(@"c:\temp\test.txt"); //read the file in
var newLines = new List<string>(); //stores the desired output
var prevENCUD = false; //detects start of new ENCUD records
foreach (var line in lines)
{
if (line.StartsWith("ENCUD"))
{
if (!prevENCUD) //add a new line
{
newLines.Add(line);
}
else //splits the line and adds just the customer number
{
var fields = line.Split('|');
newLines[newLines.Count - 1] = newLines[newLines.Count - 1] + "|" + fields[fields.Length - 1];
}
prevENCUD = true;
}
else //adds any record that isn't ENCUD
{
newLines.Add(line);
prevENCUD = false;
}
}