我正在尝试使用Windows命令行将一组.txt文件连接到csv文件中。
所以我用
type *.txt > me_new_file.csv
但是给定行的字段(以制表符分隔)最终在一列中。如何利用原始文本文件中的制表符分隔来创建csv文件,以便使用一个或多个命令行使字段在列中正确对齐?我想可能有类似......
type *.txt > me_new_file.csv delim= ' '
但还没有找到任何东西。 谢谢您的帮助。如果有人能指导我找到相关答案,也会感激不尽。
答案 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有效地完成。