将逗号分隔的文本文件导出到csv并保持前导零

时间:2015-05-07 17:49:12

标签: powershell csv

我有3个.txt文件,每个文件都需要转换成.csv文件。每个文件有12列,其中一些列具有前导零的数据。这些零需要保留。有没有办法通过PowerShell编写一个循环,将每个导出到.csv并保持前导零?

我能做的最接近的事情就是一次导出一个,但这并不能保持我需要的尾随零。

Import-Csv C:\AcctsLog.txt  -Delimiter ";" | Export-Csv C:\AcctsLog.csv

示例行将类似于:

Joe Smith;1933 Test Lane;Apt 34;Los Angeles;CA;90003-3444;0000000023;0002;New Car;SmithJoe@yahoo.com;00934200034006700213;0000666666

3 个答案:

答案 0 :(得分:1)

看看这是否适用于您的数据:

Import-Csv C:\AcctsLog.txt -Delimiter ';' -Header (1..12) | 
ConvertTo-Csv -NoTypeInformation | select -Skip 1 |
Set-Content C:\AcctsLog.csv

答案 1 :(得分:0)

如果您明确希望它包含Excel中的前导0,则必须将其保存为Excel文件(否则,Excel会将前导零处理为在打开CSV时将其解释为数字的值)。将单元格格式化为文本后,可以将数据粘贴到Excel中,然后将文件另存为excel文件。但是如果您想要CSV文件,那么请使用mjolinor的答案,因为它会生成带有前导零的CSV文件,就像您要求的那样。

要使用Excel,您必须创建Excel ComObject。然后,您可以获取文件的内容,用制表符替换分号,管道到Clip,然后粘贴到Excel中(在创建工作簿并格式化您需要的12列之后)。应该很简单:

$Excel = New-Object -ComObject Excel.Application
$Excel.Visible = $true
$FileList = @("C:\Temp\AcctsLog.txt","C:\Temp\SecondFile.txt","C:\Temp\ThirdFile.txt")

ForEach($File in $FileList){
    [void]$Excel.Workbooks.Add()
    $Excel.ActiveSheet.Range("A:L").NumberFormat = '@'
    (Get-Content $File) -replace ';', "`t" | Clip
    $Excel.ActiveSheet.Paste()
    $Excel.ActiveWorkbook.SaveAs(($File -replace "txt$","xlsx"))
    $Excel.ActiveWorkbook.Close($false)
}

$Excel.Quit()

答案 2 :(得分:0)

有一种简单的方法可以在Excel中维护前导零。

只需将其添加到单元格并键入您需要的任何值,并保留零

例如:如果我想要0000000023

输入单元格'0000000023

只要您在值之前键入它,该符号似乎会保留零。