by Anonymous » 16 Mar 2025, 17:12
Ich habe eine ausgrenzende Datei, die ich in SQL Server
importieren möchte. Die Spaltendaten sind leider nicht qualifiziert, und ich kann keine neue Kopie der an mich gesendeten Datei erhalten. Leider bedeutet dies, dass die Benutzer bei der Eingabe von Daten in das Feld in die Wagenrenditen/Zeilenbrüche eingeben konnten. Dies sollte nur 2 Datensätze sein, importiert jedoch aufgrund der Linienbrüche oder dessen versteckter Zeichen als 4 Datensätze für dieses < /p>
Code: Select all
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|||
< /code>
Ich muss diese versteckten Zeilenumbrüche irgendwie entfernen, ohne die Zeilenpausen als reale Zeilenanminatoren zu entfernen (ansonsten führt sie nur zu einem (sehr langen) Datensatz. Also im Wesentlichen eine Methode zum Entfernen aller Zeilenpausen zwischen zwei Spalten -Delimitern. 15) und wenn es weniger als 15 ist, ersetzen Sie in der Zeile einen Ersatz, um \ n
, \ r und Umgebung zu entfernen.
Code: Select all
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);
}
}
}
Aber das hat nicht funktioniert.
Code: Select all
BULK INSERT dbo.TargetTable
FROM 'C:\Work\OriginalFile.txt'
WITH (
FORMAT = 'CSV'
, FIELDTERMINATOR = '|'
, ROWTERMINATOR = '\n'
, FIRSTROW = 2
)
Aber ich weiß nicht, wie ich das tun werde, insbesondere angesichts dieser Textdatei enthält über 600.000 Datenzeilen.
Ich habe eine ausgrenzende Datei, die ich in SQL Server [url=viewtopic.php?t=8986]importieren[/url] möchte. Die Spaltendaten sind leider nicht qualifiziert, und ich kann keine neue Kopie der an mich gesendeten Datei erhalten. Leider bedeutet dies, dass die Benutzer bei der Eingabe von Daten in das Feld in die Wagenrenditen/Zeilenbrüche eingeben konnten. Dies sollte nur 2 Datensätze sein, importiert jedoch aufgrund der Linienbrüche oder dessen versteckter Zeichen als 4 Datensätze für dieses < /p>
[code]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|||
< /code>
Ich muss diese versteckten Zeilenumbrüche irgendwie entfernen, ohne die Zeilenpausen als reale Zeilenanminatoren zu entfernen (ansonsten führt sie nur zu einem (sehr langen) Datensatz. Also im Wesentlichen eine Methode zum Entfernen aller Zeilenpausen zwischen zwei Spalten -Delimitern. 15) und wenn es weniger als 15 ist, ersetzen Sie in der Zeile einen Ersatz, um \ n [/code], \ r und Umgebung zu entfernen.[code]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);
}
}
}
[/code]
Aber das hat nicht funktioniert.[code]BULK INSERT dbo.TargetTable
FROM 'C:\Work\OriginalFile.txt'
WITH (
FORMAT = 'CSV'
, FIELDTERMINATOR = '|'
, ROWTERMINATOR = '\n'
, FIRSTROW = 2
)
[/code]
Aber ich weiß nicht, wie ich das tun werde, insbesondere angesichts dieser Textdatei enthält über 600.000 Datenzeilen.