搜寻及;使用批脚本替换CSV字段中的文本

搜寻及;使用批脚本替换CSV字段中的文本,csv,batch-file,command-line,Csv,Batch File,Command Line,我有一个分号“;”分隔的CSV文件,带有“”作为文本量词,但是有些字段有“;”或“”,它们会断行;如何使用批处理脚本替换每行每个字段中的此类值,但保持字段分隔符(;)和文本量词(“”)不变?(示例将每个字段中的“;”替换为“|”和双引号单引号) 注意:我们可以依赖于两个字段之间的“;”部分(每个字段的开始和结束都有双引号,可以在解决方案中将其用作假想的分隔符) 以下是带有损坏字段的csv行的示例: "Event";"User";"Description" "stock_change";"u

我有一个分号“;”分隔的CSV文件,带有“”作为文本量词,但是有些字段有“;”或“”,它们会断行;如何使用批处理脚本替换每行每个字段中的此类值,但保持字段分隔符(;)和文本量词(“”)不变?(示例将每个字段中的“;”替换为“|”和双引号单引号)

注意:我们可以依赖于两个字段之间的“;”部分(每个字段的开始和结束都有双引号,可以在解决方案中将其用作假想的分隔符)

以下是带有损坏字段的csv行的示例:

"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不是免费的代码编写服务。。。