我有一个文本文件(.txt),其中包含以下格式的多行文本:
ABCD|TEST|123456|12/10/2017 5:41|Sample|CODENOTE123|Comment text|11/27/2017|12383697
可以看出,有9个列由管道|
运算符分隔。我需要编辑时间,即5:14
,并将其转换为05:14
。如果小时已经有两位数,则不需要对该行进行任何更改。
日期和时间始终是第4列元素。
编辑后的行应如下所示:
ABCD|TEST|123456|12/10/2017 05:41|Sample|CODENOTE123|Comment text|11/27/2017|12383697
必须对文本文件中的每一行进行此编辑,并且必须创建一个包含正确时间格式的所有行的新文本文件。
PS:列数(由管道运算符分隔)可以在9到14之间,但日期和时间将始终显示在第4列。
答案 0 :(得分:0)
执行批处理文件的Windows命令解释程序用于运行命令和可执行文件,但不用于编辑文本或二进制文件。因此,几乎所有其他脚本或编程语言都适用于此CSV文件编辑任务。
How can you find and replace text in a file using the Windows command-line environment?包含许多解决方案,主要使用应用程序或其他脚本语言来搜索和替换文件中的字符串。
提供的解决方案之一是由{strong> Dave Benham 编写的JREPL.BAT,它是批处理文件/ JScript混合。 Microsoft的JScript支持正则表达式替换。因此,只要使用文本编辑器对文本文件执行简单的正则表达式搜索和替换Perl(如正则表达式语法),通常也可以使用批处理文件中的 jrepl.bat 来完成。< / p>
下面的批处理代码要求 jrepl.bat 与包含已发布命令行的批处理文件位于同一目录中。要在此批处理文件中指定要修改的文件,名称为DataFile.csv
。
@echo off
if not exist "DataFile.csv" goto :EOF
if not exist "%~dp0jrepl.bat" goto :EOF
call "%~dp0jrepl.bat" "(\|[01][0-9]/[0-3][0-9]/(?:19|20)[0-9][0-9]) (?=[0-9]:[0-5][0-9]\|)" "$1 0" /F "DataFile.csv" /O -
编写搜索表达式是为了查找时间在两个|
格式为MM/DD/YYYY h:mm
之间的日期,并在单个数字小时之前的空格字符后插入0
。每年的世纪必须是19
或20
。
搜索字符串以任何形式查找此格式的日期/时间,因为我觉得在日期/时间字符串中更改其字段位置时,这对未来会更好。也可以使用搜索字符串将此搜索/替换限制为第四个|
分隔字段值:
^((?:[^|]*\|){3}[01][0-9]/[0-3][0-9]/(?:19|20)[0-9][0-9]) (?=[0-9]:[0-5][0-9]\|)
此批处理脚本直接修改 DataFile.csv
。用文件名替换 jrepl.bat 命令行末尾的-
会生成一个新文件,该文件是DataFile.csv
的副本,所有小时值都转换为两位数值。