使用批处理文件删除列 .CSV 中的单词
Posted
技术标签:
【中文标题】使用批处理文件删除列 .CSV 中的单词【英文标题】:Remove words in a column .CSV with Batch File 【发布时间】:2021-05-05 07:34:57 【问题描述】:我在与 .CSV 传入文件夹相同的文件夹中有一个批处理文件。
传入的 .CSV 文件有一个 Column | GPSPosition |
输出数据看起来像| 21 deg 14' 4.621" S, 159 deg 46' 45.358" W |
,是的,它是一列中的一个大短语。
我无法确定如何解决该问题,我想编写一个 .bat 文件以从 .csv 文件中列的每一行的值中删除单词“deg”。
当前结果
| GPSPosition |
| 21 deg 14' 4.621" S, 159 deg 46' 45.358" W |
| 21 deg 14' 4.621" S, 159 deg 47' 45.358" W |
| 21 deg 14' 4.621" S, 159 deg 48' 45.358" W |
预期结果
| GPSPosition |
| 21 14' 4.621" S, 159 46' 45.358" W |
| 21 14' 4.621" S, 159 47' 45.358" W |
| 21 14' 4.621" S, 159 48' 45.358" W |
【问题讨论】:
***.com ***.com> 不是免费的脚本/代码编写服务。编辑您在问题中尝试过的相关部分以及适当的代表性数据(使用剪切/粘贴)并说出您的实际和预期结果是什么。我们可以尝试帮助解决具体问题。您还应该阅读我如何提出一个好问题? ***.com/help/how-to-ask>。编写代码的请求是题外话,很可能会被关闭。那么 - 您的数据中是否有管道分隔符?你希望他们保留吗? “拆分@逗号” - 所以你有 2 列? 太好了,我不是要求写代码;我想知道我可以从哪里开始,这样我就可以帮助其他有同样问题的人。我将删除您挂断的最后一点问题,以便更容易理解。 【参考方案1】:很简单:取每一行,将deg
替换为“nothing”并输出结果字符串:
@echo off
setlocal enabledelayedexpansion
(for /f "usebackq delims=" %%a in ("input.csv") do (
set "line=%%a"
set "line=!line:deg =!"
REM set "line=!line:,=|!"
echo !line!
))>output.csv
在set
命令中使用引号可以避免管道符号出错,延迟扩展使用echo
命令处理管道。
(在需要时,也将逗号替换为管道符号。根据您的示例输出,这是不需要的。但我为此插入了代码;如果您想使用它,请删除REM
)
【讨论】:
【参考方案2】:@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
rem The following settings for the source directory, destination directory, target directory,
rem batch directory, filenames, output filename and temporary filename [if shown] are names
rem that I use for testing and deliberately include names which include 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%\q65987390.txt"
SET "outfile=%destdir%\outfile.txt"
SET "indelims=|,"
SET "outdelim=^|"
(
FOR /f "usebackq tokens=1,2delims=%indelims%" %%b IN ("%filename1%") DO (
SET "col1=%%b"
SET "col2=%%c"
IF DEFINED col2 (
SET "col1=!col1:deg =!"
SET "col2=!col2:deg =!"
ECHO %outdelim%!col1:~1!%outdelim%!col2:~1,-1!%outdelim%
) ELSE (
rem - no col2, so header
ECHO %outdelim%!col1:~1,-1!%outdelim%Column2header string%outdelim%
)
)
)>"%outfile%"
GOTO :EOF
请参阅提示中的set /?
以破译:m,n
语法。请注意,管道需要在输出时转义(使用插入符号),否则 cmd
会将其视为重定向。
【讨论】:
以上是关于使用批处理文件删除列 .CSV 中的单词的主要内容,如果未能解决你的问题,请参考以下文章