使用批处理文件删除列 .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 中的单词的主要内容,如果未能解决你的问题,请参考以下文章

从 CSV 批处理文件中删除列

Python 使用pandas库处理csv文件

如何使用熊猫在特定列中的csv文件中查找特定单词

如何用批处理命令把1个文件夹里多个csv文件的某一列合并成一个txt

cmd去除csv首行

使用批处理删除文本文件中特定单词之前的文本