【问题标题】:Replace text based on a value on a certain position根据某个位置的值替换文本
【发布时间】:2015-12-15 12:28:03
【问题描述】:

我有一组文本文件,通过 FTP 进入。一旦它们进入,我想根据另一个位置的值替换一个位置的值。我可以用 Windows 命令脚本来配合吗?

例如,文本文件包含以下内容;

-0000000062,790BCEUR

-0000000000,000

-0000000119,800BCEUR

-0000001352,560BCEUR

基于该值,如果高于 999,999,则应将值 BCEUR 替换为 C____,如果不高于 999,999 BCEUR,则应将其替换为 SCEUR。如果该值为 0,则那里不应该有任何东西,情况已经如此。 我认为“简单”的方法是检查位置 7 上的值是否为 0 或非 0,然后将 BCEUR 替换为适用的值。

有人有什么好主意吗?我不是一个真正的程序员,所以我正在努力解决这个问题。

【问题讨论】:

  • 请注意,SO 不是免费的编码服务;所以提供你迄今为止尝试过的代码并描述你卡在哪里......
  • 虽然我完全理解这一点,但我只是不知道从哪里开始。我只对 SQL 和 SQL Server 有一些了解。如果有人能给出一些关于从哪里开始的总体想法,我可以自己从那里扩展。
  • SO 旨在用于特定的编程问题,所以你在这里发帖有点离题......无论如何,你可以从 for /F 开始(在命令提示符下输入 for /?帮助);对于字符串替换,输入set /?;对于条件,输入if /?...
  • 第一个字符是-,所以检查的位置应该是第8位吗?文本文件中是否需要保留空白行?

标签: batch-file text replace


【解决方案1】:

你不能简单地检查第 7 位的数字,因为你可以有一个像0020000119,800 这样的值,它肯定大于0000000999,999

此解决方案使用JREPL.BAT - 一个纯脚本(混合 JScript/batch)正则表达式文本处理器,可在 XP 以后的任何 Windows 机器上本机运行。

jrepl "^(-(?:(0000000)|\d{7})\d{3},\d{3})BCEUR" "$1+($2?'SCEUR':'C____')" /j /f test.txt /o output.txt

它会查找与 -##########,###BCEUR 等模板匹配的字符串。第一个捕获的组代表整个数字。第二个捕获的组只有前 7 位当且仅当它只有零,否则它是空的。

/J 选项将替换字符串视为 JScript 表达式,它以整数开头,后跟 SCEURC____,具体取决于是否定义了第二个捕获的组。

如果您将命令放在批处理脚本中,请使用 CALL JREPL

如果您希望结果覆盖原始文件,请使用/O -

【讨论】:

  • 感谢输入dbenham,去看看它是否有效。
【解决方案2】:

这似乎有效 - 删除了空白行。

@echo off
setlocal enabledelayedexpansion
(
for /f "usebackq delims=" %%a in ("c:\folder\file.txt") do (
  set "var=%%a"
  if "!var:~0,15!"=="-0000000000,000" (
      echo -0000000000,000
    ) else (
      if "!var:~0,8!"=="-0000000" (echo !var:~0,15!SCEUR) else (echo !var:~0,15!C____)
  )
)
)>"outputfile.txt"
pause

【讨论】:

  • 感谢输入 foxidrive,去看看这是否有效。
猜你喜欢
  • 2019-01-30
  • 1970-01-01
  • 2018-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多