2017-12-22 13 views
0

データベースからデータを取得するためのPowerShellスクリプトがありますが、一部のフィールドにはカンマが含まれているため、StreamReaderがコンマでフィールドに分割するため、フィールドが分​​割されます。データをフィールドに分割する方法の区切り文字を変更するにはどうすればよいですか?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(); 
+0

どこにでもStreamReaderが表示されません。 StreamWriterとSqlDataReaderが表示されます。それはどういう意味ですか? –

答えて

0

この投稿を読んであなたの努力に役立つかどうかを確認してください。それはテキストフィールですが、可能なことにあなたの創造性を広げることができます。

「stackoverflow.com/questions/14954437/streamreader-with-tab-delimited-text-file」FYI

、コンマを持っているこれらの列のために、 そうでなければ「フィールド」と呼ばデリミタタイプはありません価値の一部として、共通のアプローチは、値を二重引用符で囲むか、それをエスケープすることです。

関連する問題