![将固定宽度转换为 CSV?](https://linux22.com/image/1287368/%E5%B0%86%E5%9B%BA%E5%AE%9A%E5%AE%BD%E5%BA%A6%E8%BD%AC%E6%8D%A2%E4%B8%BA%20CSV%EF%BC%9F.png)
我有一大堆内容不同但布局相同的数据文件。我需要先将它们转换为 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"