将.txt文件连接到带有制表符分隔符的csv文件中

时间:2014-12-01 21:33:20

标签: windows command-line cmd

我正在尝试使用Windows命令行将一组.txt文件连接到csv文件中。

所以我用

type *.txt > me_new_file.csv

但是给定行的字段(以制表符分隔)最终在一列中。如何利用原始文本文件中的制表符分隔来创建csv文件,以便使用一个或多个命令行使字段在列中正确对齐?我想可能有类似......

type *.txt > me_new_file.csv delim= '  ' 

但还没有找到任何东西。 谢谢您的帮助。如果有人能指导我找到相关答案,也会感激不尽。

2 个答案:

答案 0 :(得分:0)

从命令行开始,你的时间相当复杂。 Windows cmd.exe命令处理器比dash,ash或bash,et.al简单得多。

最好的办法是将所有文件连接到.csv文件中,在文本编辑器中打开它,然后执行全局查找并替换替换,

请注意,您的其他数据中没有逗号。

答案 1 :(得分:0)

如果源文件以制表符分隔,则输出文件也以制表符分隔。根据您使用的软件,您应该能够正确加载制表符分隔数据。

假设您使用的是Excel。如果输出文件具有.csv扩展名,则Excel将在打开文件时默认使用逗号分隔列。当然这对你不起作用。但是,如果您将文件重命名为其他扩展名(如.txt),那么当您使用Excel打开它时,它将打开一系列对话框,您可以在其中指定格式,包括制表符分隔。

如果您想保留.csv扩展名并让Excel自动正确打开它,那么您需要转换数据。使用JREPL.BAT - a hybrid JScript/batch utility that performs a regular expression search and replace on text data可以非常轻松地完成此操作。 JREPL.BAT是纯脚本,可​​以在任何Windows机器上从XP开始本地运行。

以下用引号括起每个值,以防值包含逗号文字。

type *.txt 2>nul | jrepl "\t" "\q,\q" /x /jendln "$txt='\x22'+$txt+'\x22'" /o output.csv


注意: 如果您的任何源.txt文件中的最后一行未以a type *.txt结尾,则(for %F in (*.txt) do jrepl "\t" "\q,\q" /x /jendln "$txt='\x22'+$txt+'\x22'" /f "%F") >output.csv 的使用将失败新队。在这种情况下,下一个文件的第一行将附加到上一个文件的最后一行。不好。

您可以通过在FOR循环中单独处理每个文件来解决该问题。

(for %%F in (*.txt) do call jrepl "\t" "\q,\q" /x /jendln "$txt='\x22'+$txt+'\x22'" /f "%%F") >output.csv

以上内容旨在在命令行上运行。如果在批处理脚本中使用,则需要进行一些更改:

{{1}}


注意:我的回答是假设源文件都没有包含引号。如果它们确实包含引号,则需要进行更复杂的搜索和替换。但它仍然可以通过JREPL有效地完成。