CONTACT_SOURCE_ID|LAST_UPDATED|LAST_UPDATED_BY|T92|D10|T94|T95|T96|T97|T98|T99|T100|T101|T124|T125|T126
72|05/01/2006 14:48:38|13|||Mr|S|BLOGGS|1 Random Building
Random Street|Random Town||Random County|RN1 2DM|||
74|05/01/2006 15:48:38|31|||Dr|Delta|Who|The
Tardis|SpaceAndTime||Universe|D1 0WW|||
\n
\r
和
Environment.NewLine
,然后将行写回新文件。
const Int32 BufferSize = 128;
string fileName = @"C:\Work\OriginalFile.txt";
string outputFile = @"C:\Work\NewFile.txt";
int numColBreaks = 0;
using (var fileStream = File.OpenRead(fileName))
using (var streamReader = new StreamReader(fileStream, Encoding.UTF8, true, BufferSize))
{
String line;
while ((line = streamReader.ReadLine()) != null)
{
numColBreaks = 0;
foreach (char c in line)
{
if (c == '|')
{
numColBreaks++;
}
}
if (numColBreaks != 15)
{
line.Replace(Environment.NewLine, " ").Replace("\n", " ").Replace("\r", " ");
}
using (StreamWriter sw = File.AppendText(outputFile))
{
sw.WriteLine(line);
}
}
}
但这尚未起作用。 我还是C#的新事物,所以可能在这里忽略了一些东西。如果我可以以某种方式文本限定数据,我认为SQL Server会这样工作:
BULK INSERT
但我不知道该怎么做,特别是考虑到此文本文件中有超过600,000行数据。(这基本上不是答案,因为您不喜欢它,但我需要更多的空间)Imho,在文本字段中拥有CRLF是很正常的,我不会为此而怪罪,但归咎于SQL Server女士与CRLF的比赛不佳。如今,我正在写各种各样的东西,可以从MS SQL迁移到PostgreSQL。这不仅包括移动表和数据,还包括SP,功能等。为了使长话简短,我不会尝试使用的是SQL女士的文字。 对于批量副本,如果有机会,则直接将Oracle用作源,而MS SQL用作C#中的SQLBulkCopy类作为目标。效果很好。
如果您需要使用文本导入,(这可能不是连续的任务),那么恕我直言,可以执行文本导入的最佳数据库就是PostgreSQL。只需安装PostgreSQL或将其与Docker一起使用(本地插入更容易),然后使用PostgreSQL的出色复制命令进行导入即可。它可以处理这样的数据。 一旦您在PostgreSQL中获得数据(与PostgreSQL进行最好的数据),您可以通过在PostgreSQL中使用FDW转移到MS SQL Server,或者对您来说更容易转移到SQLBULKCOPY类中,仅使用sqlbulkcopy类作为postgresql作为source,并且是MS SQL作为TARGET。SpeedWise,假设您的数据看起来像您提供的数据,则将这些数据传达给PostgreSQL,然后再向MS SQL少于15-20秒。 或者,如果您不是C#的新手,则可以使用Regex对该数据进行消毒,并使用SQLBulkCopy类推到MS SQL(但仍然更容易完成此数据)。