PowerShell StreamReader更改分隔符

时间:2017-12-22 19:23:41

标签: powershell

我有一个PowerShell脚本从数据库中提取数据,但有些字段包含逗号,导致分割字段,因为StreamReader用逗号将其拆分为字段。如何更改数据如何分割到其字段的分隔符?

$ConnectionString = "Data Source=server1; Database=Development; Trusted_Connection=True;";
$streamWriter = New-Object System.IO.StreamWriter ".\output.csv"
$sqlConn = New-Object System.Data.SqlClient.SqlConnection $ConnectionString
$sqlCmd = New-Object System.Data.SqlClient.SqlCommand
$sqlCmd.Connection = $sqlConn
$sqlCmd.CommandText = "SELECT * FROM Development.dbo.All_Opportunities WITH(NOLOCK)"
$sqlConn.Open();
$reader = $sqlCmd.ExecuteReader();

# Initialze the array the hold the values
$array = @()
for ( $i = 0 ; $i -lt $reader.FieldCount; $i++ ) 
    { $array += @($i) }

# Write Header
$streamWriter.Write($reader.GetName(0))
for ( $i = 1; $i -lt $reader.FieldCount; $i ++) 
{ $streamWriter.Write($("," + $reader.GetName($i))) }

$streamWriter.WriteLine("") # Close the header line

while ($reader.Read())
{
    # get the values;
    $fieldCount = $reader.GetValues($array);

    # add quotes if the values have a comma or double quote
    for ($i = 0; $i -lt $array.Length; $i++)
    {
    if ($array[$i] -match "`"|\S")
        {
            $array[$i] = '"' + $array[$i].Replace("`"", "`"`"").ToString() + '"';
        }
    }

    $newRow = [string]::Join(",", $array);

    $streamWriter.WriteLine($newRow)
}
$reader.Close();
$sqlConn.Close();
$streamWriter.Close();

1 个答案:

答案 0 :(得分:0)

您是否阅读过这篇文章,看看它是否有助于您的努力。这是一个文本领域,但可以为你创造可能的创造力。

' stackoverflow.com/questions/14954437/streamreader-with-tab-delimited-text-file'

仅供参考,没有名为' field'的分隔符类型。 否则,对于那些以逗号作为值的一部分的列,一种常见的方法是双引号或转义它。