2017-12-22 8 views
0

Ich habe ein PowerShell-Skript, um Daten aus einer Datenbank zu ziehen, aber einige der Felder enthalten Kommas und das führt zu einer Aufschlüsselung der Felder, weil der StreamReader es in Felder durch Komma aufteilt. Wie kann ich das Trennzeichen für die Aufteilung der Daten in die Felder ändern?PowerShell StreamReader Change Delimiter

$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(); 
+0

Ich sehe keinen StreamReader irgendwo. Ich sehe einen StreamWriter und einen SqlDataReader. Was meinst du? –

Antwort

0

Haben Sie diesen Beitrag gelesen, um zu sehen, ob es Ihre Bemühungen hilft. Es ist für ein Textfeld, aber könnte Ihnen Kreativität eröffnen, was möglich ist.

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

FYI, gibt es keinen Begrenzer Typ ‚Feld‘ Andernfalls für diese Spalten genannt, die ein Komma haben Als Teil des Werts besteht ein gängiger Ansatz darin, den Wert entweder doppelt anzugeben oder zu entkommen.