【问题标题】:Out-File tab-delimited file issueOut-File 制表符分隔的文件问题
【发布时间】:2016-06-23 08:27:09
【问题描述】:

每天我都会收到许多需要导入系统的 CSV 文件。但在导入它们之前,我需要将它们全部编码为 UTF-8,然后一一上传。这就是我想要一个脚本的原因,它将所有 *.csv 文件编码为 UTF-8,然后将它们合并到一个文件中。

脚本工作正常,但是当我导出文件时,第一个选项卡被删除,这是一个大问题。

一个文件在编码和合并之前的样子:

USERID  ACTIVE  FIRSTNAME   LASTNAME    EMAIL   LANGUAGE    HOSTPRIVILEGE   TIMEZONE    DIVISION    DEPARTMENT  PROJECT OTHER   CUSTOM5 CUSTOM6 CUSTOM7 CUSTOM8 CUSTOM9 CUSTOM10    COUNTRY
    Y   <firstname> <lastname>  <name@mail.com> de  <text>  <text>                          <randomnumber>              

(看起来,Stackoverflow 不喜欢 TAB?或者我只是为了 noobish.. :S)

实际上第二行以一个制表符开始,然后每个“块”由一个制表符分隔。除了最后一个,“text”和“randomnumber”之间有7个tab。

当我运行脚本时,它看起来像这样:

USERID  ACTIVE  FIRSTNAME   LASTNAME    EMAIL   LANGUAGE    HOSTPRIVILEGE   TIMEZONE    DIVISION    DEPARTMENT  PROJECT OTHER   CUSTOM5 CUSTOM6 CUSTOM7 CUSTOM8 CUSTOM9 CUSTOM10    COUNTRY
Y   <firstname> <lastname>  name@mail.com   de  <text>  <text>                          <randomnumber>              
Y   <firstname> <lastname>  name@mail.com   de  <text>  <text>                          <randomnumber>

第一个标签丢失了。

这是 PowerShell 脚本:

Copy-Item ".\1_Input\*.csv" ".\2_cache"
Get-ChildItem ".\2_Cache\*.csv" | foreach {
  (Get-Content $_.FullName) | Set-Content $_.FullName -Encoding UTF8
}
ls ".\2_cache" -Fi *.csv | ipcsv |
  ConvertTo-Csv -NoTypeInformation |
  % { $_ -replace '"', ''} |
  Out-File ".\3_output\concat.csv" -fo -en utf8
Remove-Item ".\2_cache\*.csv"

编辑:我找到了一个“解决方法”,我添加了参数

ipcsv -delimiter "`t"

但是当我将参数添加到 ConvertTo-CSV 时出现错误。所以现在它用分隔符“,”导出。但幸运的是系统能够读取导入它也用逗号分隔。

【问题讨论】:

    标签: csv powershell delimiter


    【解决方案1】:

    如果您只想将文件转换为 UTF-8,然后将它们连接起来,那么从一个文件中获取标题行会简单得多,然后在将所有文件写入输出文件时跳过所有文件的标题:

    $files   = @(Get-ChildItem '.\1_Input\*.csv')
    $outfile = 'concat.csv'
    
    Get-Content $files[0] -TotalCount 1 | Set-Content $outfile -Encoding UTF8
    $files | ForEach-Object {
      Get-Content $_.FullName | Select-Object -Skip 1
    } | Add-Content $outfile -Encoding UTF8
    

    【讨论】:

    • 谢谢,完美!我将最终的脚本“转换”为 .exe,所以即使是“傻瓜”也应该能够使用它。但随后卡巴斯基杀毒软件将其识别为特洛伊木马,哈哈。该死的。也许我会继续使用 .ps1 脚本.. 编辑:如果有人想知道,我使用 PS2EXE 来“转换”脚本..
    • 尝试改用 PowerGUI(免费),也许你会更好地绕过卡巴斯基。还必须以某种方式建立白名单系统。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-31
    • 2013-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-09
    • 2012-10-05
    相关资源
    最近更新 更多