删除 .csv 文件中字符串周围的引号

问题描述 投票:0回答:1

我有一个 csv,其列包含如下内容:

“123,456”或“1.2345”请参阅附图了解更多信息。

我想删除 csv 中所有列的所有引号。引号始终是第一个和最后一个字符。
该文件每天生成并包含许多列。我想运行一个批处理或类似的操作,以按计划每天删除所有列中的引号。我不是编码员,对批处理文件有点熟悉,所以如果可能的话更喜欢使用批处理。我添加了我正在处理的单元格内容示例的图像。

我必须使用.csv 格式。该脚本可以更新现有文件或写入新文件。

提前非常感谢Example csv file

我在网上搜索并找到了 VBA 脚本,但真的想使用一个批处理,我可以将其放入调度程序中每天运行。很高兴听到替代方案,但我无法使用宏。

excel windows batch-file
1个回答
0
投票
@ECHO OFF
SETLOCAL
rem The following settings for the directories and filenames are names
rem that I use for testing and deliberately includes spaces to make sure
rem that the process works using such names. These will need to be changed to suit your situation.

SET "sourcedir=u:\your files"
SET "destdir=u:\your results"
SET "filename1=%sourcedir%\q77630104.txt"
SET "outfile=%destdir%\outfile.txt"

(
FOR /f "usebackqdelims=" %%e IN ("%filename1%") DO SET "string=%%e"&CALL :process
)>"%outfile%"

GOTO :EOF

:process
:: remove quotes
SET "string=%string:"=%"
:: remove commas
SET "string=%string:,=%"
:: replace spaces with commas
SET "string=%string: =,%"
:: And report
ECHO %string%
GOTO :eof

在应用于真实数据之前,始终验证测试目录。

请注意,如果文件名不包含空格等分隔符,则

usebackq
%filename1%
周围的引号都可以省略。

您需要更改分配给

sourcedir
destdir
的值以适合您的情况。该列表使用适合我的系统的设置。

我故意在名称中包含空格,以确保空格得到正确处理。

我使用了一个名为

q77630104.txt
的文件,其中包含一些虚拟数据用于测试。

生成定义为

%outfile%

的文件

for
行周围的括号导致子例程
echo
:process
输出被重定向到输出文件。

建议处理字符串的三个阶段。请参阅 docco 提示中的

set/?
- 或 SO 上的数千个示例。

如果您不想执行

set
中的任何
:process
命令,只需将其删除即可。

针对包含以下内容的文件运行的结果

"123,456" ""1,123,456" "123456.00" "234"

123456,1123456,123456.00,234
© www.soinside.com 2019 - 2024. All rights reserved.