搜寻及;使用批脚本替换CSV字段中的文本
我有一个分号“;”分隔的CSV文件,带有“”作为文本量词,但是有些字段有“;”或“”,它们会断行;如何使用批处理脚本替换每行每个字段中的此类值,但保持字段分隔符(;)和文本量词(“”)不变?(示例将每个字段中的“;”替换为“|”和双引号单引号) 注意:我们可以依赖于两个字段之间的“;”部分(每个字段的开始和结束都有双引号,可以在解决方案中将其用作假想的分隔符) 以下是带有损坏字段的csv行的示例:搜寻及;使用批脚本替换CSV字段中的文本,csv,batch-file,command-line,Csv,Batch File,Command Line,我有一个分号“;”分隔的CSV文件,带有“”作为文本量词,但是有些字段有“;”或“”,它们会断行;如何使用批处理脚本替换每行每个字段中的此类值,但保持字段分隔符(;)和文本量词(“”)不变?(示例将每个字段中的“;”替换为“|”和双引号单引号) 注意:我们可以依赖于两个字段之间的“;”部分(每个字段的开始和结束都有双引号,可以在解决方案中将其用作假想的分隔符) 以下是带有损坏字段的csv行的示例: "Event";"User";"Description" "stock_change";"u
"Event";"User";"Description"
"stock_change";"usertest1@gmail.com";"Change Product Teddy;Bear (Shop ID: "AR832H0823")"
"stock_update;change";"usertest2@gmail.com";"Update Product "30142_Pen" (Shop ID: GI8759)"
@ECHO关闭
SETLOCAL
设置“sourcedir=U:\sourcedir”
设置“destdir=U:\destdir”
设置“filename1=%sourcedir%\q35828741.txt”
设置“outfile=%destdir%\outfile.txt”
对于(1,1,3)中的/L%%f,请设置“字段%%f=”
(
对于/f“usebackqdelims=“%%a IN”(“%filename1%”)DO(
对于(%%a)中的%%b,请执行以下操作:处理%%b
)
)>“%outfile%”
后藤:EOF
:进程
如果未定义字段1,请设置“字段1=%~1”&转到:EOF
如果未定义字段2,则设置“字段2=%~1”&转到:EOF
设置“field3=%~1”
:repcwp
对于/f“tokens=1*delims=:”%f IN(“%field3%”)DO(
设置“field3=%%g”
如果定义了字段3(设置“字段3=%%f”%%g并转到repcwp),则为其他(设置“字段3=%%~f”)
)
设置“field1=%field1:;=|%
设置“field1=%field1:=”%
设置“field2=%field2:;=|%"
设置“field2=%field2:=”%
设置“field3=%field3:;=|%
设置“field3=%field3:=”%
回显“%field1:”“=:%”;“%field2:”“=:%”;“%field3:”“=:%”
对于(1,1,3)中的/L%%f,请设置“字段%%f=”
后藤:eof
您需要更改sourcedir
和destdir
的设置以适应您的环境
我使用了一个名为q35828741.txt
的文件,其中包含用于测试的数据
生成定义为%outfile%的文件
处理文件的每一行,假定它构造良好
使用一个简单的for
循环将三个字段传递到过程:process。每行的格式为“data1”separator“data2”separator“data3”
在:处理,将数据累积到字段1..3
因为公共子字符串替换机制使用:
来分隔“to”和“from”“字符串,用不同的字符串替换每个:
”
。这仅适用于field3
,因为从示例数据中可以看出,它是唯一可能包含冒号的字段。如果冒号可能出现在其他字段中,则只需跟随反弹的球即可
替换所有冒号后,根据需要替换分号和兔耳,然后在将数据输出到目标文件的echo
中,将任何'
替换为冒号
这造成了许多假设,包括数据不包含%
或其他笨拙的字符,并且数据中没有:
的实例。我不明白您为什么要转换teddy;熊
到泰迪熊
,但是。。。嗯
根据评论中的要求,您可以使用my的/T
选项执行以下查找/替换(以较早的查找/替换为准):
“
在行首,或”;“
任何地方,或”
在行尾==>以我们的身份离开
“
任何其他地方==>转换为”
;
任何其他地方==>转换为|
jrepl“^\q |\q\q |\q$\q;“$&”|“/x/t”“/f test.csv/o-
这不是一个问题,而是一个任务请求;请分享您迄今为止的尝试;请记住,so不是免费的代码编写服务。。。