use*_*741 6 sql-server powershell bcp
我有一个.CSV文件,我使用SQL Server的BCP命令行BULK-COPY实用程序创建,以转储一堆数据库表.
由于我想使用Powershell导入这些.CSV文件,并使用format-table cmdlet将它们转换为一个漂亮的报告,我遇到列排列等问题.因为某些列包含来自SQL Server的NULL.我没有选择先从SQL Server转换NULL; 由于我将表格导出为CSV的方式.
因此,我想在尝试将其传递到format-table cmdlet之前从.CSV文件中删除所有NULL.
我的基本代码如下:
$CSV=import-csv "c:\temp\tablename.csv"
$CSV | format-table -autosize | out-string -width 4096 >"C:\TEMP\tablename.txt"
Run Code Online (Sandbox Code Playgroud)
我尝试过这样的事情:
$CSV | -replace($null,"") | format-table -autosize | out-string -width 4096 > "C:\TEMP\tablename.txt"
Run Code Online (Sandbox Code Playgroud)
但我仍然得到NULL.
有谁知道如何从我的CSV中删除NULL,以便我可以显示一个很好的表格报告.我想把这些.TXT报告导入SVN,但是NULL会导致我出现问题,而且会导致报告出现偏差.
CSV文件,如十六进制编辑器所示:
00000EA0h: 31 38 39 2C 31 31 39 2C 37 35 29 2C 77 68 69 74 189,119,75),whit
00000EB0h: 65 2C 77 68 69 74 65 2C 2C 2C 2C 2C 2C 2C 2C 2C e,white,,,,,,,,,
00000EC0h: 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C ,,,,,,,,,,,,,,,,
00000ED0h: 2C 2C 0D 0A 61 63 62 34 33 5F 30 31 2C 4F 4E 2C ,,..acb43_01,ON,
00000EE0h: 00 2C 32 37 2C 39 39 2C 2F 61 63 62 34 33 5F 30 .,27,99,/acb43_0
00000EF0h: 31 2F 34 33 62 61 6C 61 6E 63 65 73 2E 67 69 66 1/43balances.gif
Run Code Online (Sandbox Code Playgroud)
请注意,在EE0h,第一个字符是NULL,0x00.
use*_*741 13
经过一段时间的游戏,我终于发现这个语法有效:
(Get-Content "C:\temp\tablename.csv") -replace "`0", "" | Set-Content "C:\temp\tablename.csv"
Run Code Online (Sandbox Code Playgroud)
更新- 现在我明白了 NULL (十六进制)的意思,0x00我可以给你另一种方法。
您可以通过将文件读取为二进制来过滤掉这些字节,如下所示:
Get-Content "c:\temp\tablename.csv" -Encoding Byte | ? {$_ -ne 0x00} | Set-Content "c:\temp\tablename2.csv" -Encoding Byte
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16222 次 |
| 最近记录: |