我正在尝试使用 Powershell 将非常大的 CSV 文件加载到 SQL Server 中。该代码还必须即时应用正则表达式替换,允许使用各种分隔符、EOR 和 EOF 标记。为了维护,我真的希望所有这些逻辑都存在于 Powershell 中,而无需导入程序集。
为了提高效率,我知道我需要使用 SQLBulkCopy 方法。但是,我看到的所有 Powershell 示例都填充了一个 DataTable 并传递它,这对我来说是不可能的,因为文件大小。
我很确定我需要将 StreamReader 包装在 Idatareader 中,然后将其传递给 SQLBulkcopy。我发现了几个用 C# 实现的很好的例子:http:
//archive.msdn.microsoft.com/FlatFileDataReader
http://www.codeproject.com/Articles/9258/A-Fast-CSV-Reader
是否可以在不导入 C# 程序集的情况下使用本机 PowerShell 完成此功能?我特别难以转换抽象类包装器。
这是我到目前为止没有通过 IdataReader 并打破内存限制的代码。
function Get-CSVDataReader()
{
param (
[string]$path
)
$parsedData = New-Object 'System.Collections.Generic.List[string]'
#List<string[]> parsedData = new List<string[]>()
$sr = new-object IO.StreamReader($path)
while ($line = $sr.ReadLine())
{
#regex replace and other logic here
$parsedData.Add($line.Split(','))
}
,$parsedData #if this was an idatareader, the comma keeps it from exploding
}
$MyReader = Get-CSVDataReader('This should not fill immediately. It needs a Read Method.')
非常感谢您的帮助。