我有一个文本文件 (.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列。
执行批处理文件的 Windows 命令解释器设计用于运行命令和可执行文件,而不是用于编辑文本或二进制文件。因此,几乎所有其他脚本或编程语言都更适合此 CSV 文件编辑任务。
如何使用 Windows 命令行环境查找和替换文件中的文本?包含许多主要使用应用程序或其他脚本语言在文件中搜索和替换字符串的解决方案。
提供的解决方案之一是由Dave Benham编写的JREPL.BAT,它是一个批处理文件/JScript 混合体。Microsoft 的 JScript 支持正则表达式替换。因此,每当可以使用文本编辑器在文本文件上执行 Perl 中的简单正则表达式搜索和替换(如正则表达式语法)时,通常也可以使用批处理文件中的jrepl.bat来完成。
下面的批处理代码期望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
与所有小时值转换为两位数字的值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句