将固定宽度转换为 CSV?

将固定宽度转换为 CSV?

我有一大堆内容不同但布局相同的数据文件。我需要先将它们转换为 CSV,然后才能将它们导入 CRM 应用程序。

我通常在 Excel 中打开制表符分隔文件,它会提示我使用文本导入向导手动定义制表位。打开文件后,我会将其转换为 CSV。

问题是我有一堆这样的文件(比如说 20-30 个),而 Excel 不记得在文本导入向导中做了什么,而且由于原因太长无法在这里解释,我不能将它们全部合并为一个海量文件 - 即使数据结构相同。

我想知道是否存在一个程序或流程可以让我保存数据文件结构的“模板”,然后将其应用于每个文件,这样我就不必手动重新创建它了?

答案1

为此,我通常会使用脚本语言中的批处理

例如这是 AutoIt:

$getfile = FileOpenDialog("Choose a file",@ScriptDir, "*.tsv",7)
If StringInSTr($getfile,"|") = 0 Then
    $split = StringSplit($getfile,"|")
    For $i = 2 to $split[0]
        $file = FileOpen($split[$i])
        StringReplace($split[$i],@TAB,",")
        FileClose($split[$i])
    Next
Else
    $file = FileOpen($getfile)
    StringReplace($file,@TAB,",")
    FileClose($file)
EndIf

这在 VBScript、Batch、Python 或 Perl 中同样简单。

答案2

您拥有哪些工具?例如,您是否仅限于使用 Windows GUI,或者您是否拥有 Linux shell 帐户?您是否可以下载任意垃圾,或者您是否仅限于工作站上的现成内容?

如果没有其他方法,那么在 Word / 写字板 / 记事本中打开文件,然后进行全局搜索和替换,用逗号替换制表符怎么样?或者",",如果您的数据集包含逗号,也许可以使用。

答案3

我倾向于使用文本板因为我可以使用正则表达式进行搜索和替换,所以我用逗号替换制表符。也许类似的方法可以解决您的情况

答案4

如果你使用的是 Windows 并且已安装 PowerShell您可以使用此单行命令获取当前文件夹中的所有 .CSV 文件,将它们导入为“制表符分隔”(`t)文件,然后将它们导出为具有相同名称但前缀为“New-”的实际 CSV:

(get-childitem "*.csv" | foreach ($_) { ($newName="New-"+$_.name) -and (Import-Csv $_.fullname -Delimiter "`t" | Export-Csv .\$newName -notype) }) -and (Remove-Variable "newName")

为了澄清/脚本起见,这里将其分成多行:

get-childitem "*.csv" | foreach ($_) { 
    $newName="New-"+$_.name
    Import-Csv $_.fullname -Delimiter "`t" | Export-Csv .\$newName -notype
    }
Remove-Variable "newName"

相关内容