2014-12-01 59 views
0

我想将使用Windows命令行的一组.txt文件连接到一个csv文件中。将.txt文件连接到带有制表符分隔符的csv文件

所以我用

type *.txt > me_new_file.csv 

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

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

但一直还没有找到任何东西。 谢谢你的帮助。如果有人能指示我一个相关的答案,也将不胜感激。

回答

0

从命令行你会有一个相当复杂的时间。 Windows cmd.exe命令处理器比短划线,灰或bash等等要简单得多。

最好的事情是将所有的文件连接成.csv文件,在文本编辑器打开它,做一个全球查找和替换与替换,

要小心,你的其他数据不有任何逗号。

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是纯粹的脚本,可以在XP以后的任何Windows机器上本机运行。

下面将每个值都包含在引号中,以防万一某个值包含逗号文字。

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


当心:您使用的type *.txt将如果您的任何来源的最后一行.txt文件不以回车结束失败。在这种情况下,下一个文件的第一行将被追加到前一个文件的最后一行。不好。

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

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

以上是设计在命令行上运行的。如果在批处理脚本中使用,则需要一些变化:

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


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

+0

嗨,谢谢你的详细回复。我昨天结束了解决这个问题,与同事的帮助。我们做的是两步。首先连接文件,我在我的问题中写的方式。然后用一个逗号替换标签,这似乎是个诀窍。我会在稍后的地方写下我们的解决方案。 – 2014-12-02 18:34:18

+0

@SasonTorosean - 如果您的任何制表符分隔的源文件包含逗号,那么如果仅用逗号替换制表符,则会得到错误的结果。你应该把你的值用引号括起来,就像我的答案一样。 – dbenham 2014-12-02 18:41:58

相关问题