首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将相同文本的数字相加在一起

将相同文本的数字相加在一起
EN

Stack Overflow用户
提问于 2022-06-18 20:18:13
回答 5查看 74关注 0票数 -1

我想要创建一个批处理文件,在其中我可以看到我已经收集到的游戏。游戏将此信息保存在.txt文件中。输出结果将如下所示。

代码语言:javascript
复制
70x Silver.
Back Pearl.
41x Copper.
Amethyst.
Amethyst.
12x Silver.
Back Pearl.
21x Copper.
5x Silver.
Back Pearl.
Back Pearl.
Amethyst.

我现在要做的是,将同名的项添加到一起,如下所示:

代码语言:javascript
复制
128x Silver.
4x Back Pearl.
62x Copper.
3x Amethyst.

有数以百计的不同名称的项目,而不仅仅是这4。这是可能的吗?任何帮助都将不胜感激。谢谢!

EN

回答 5

Stack Overflow用户

发布于 2022-06-18 20:58:47

Would that be possible? -是的。

代码语言:javascript
复制
@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%a in (t.txt) do (
  set " z=%%a"
  set " z=!z:x =@!"
  set " z=!z: =_!"
  for /f "tokens=1,2 delims=@" %%b in ("!z!") do (
    if "%%c" == "" (
      set "x=1"
      set "y=%%b
    ) else (
      set "x=%%b"
      set "y=%%c"
    )
    set /a #!y!+=!x!
  )
)
(for /f "tokens=1,2 delims=#=" %%a in ('set #') do (
  set "x=%%a"
  set "y=%%bx    "
  echo !y:~0,4! !x:_= !
))>summary.txt

输出示例数据(我希望,字母排序对您来说是可以的):

代码语言:javascript
复制
3x Amethyst.
4x Back Pearl.
62x Copper.
87x Silver.

(对于给定的输入数据,120银元的计算可能有点乐观)

票数 1
EN

Stack Overflow用户

发布于 2022-06-18 21:39:09

代码语言:javascript
复制
@ECHO OFF
SETLOCAL
rem The following settings for the source directory and filename 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 "filename1=%sourcedir%\q72672485.txt"

:: remove variables starting #
FOR  /F "delims==" %%b In ('set # 2^>Nul') DO SET "%%b="

FOR /f "usebackqdelims=" %%b IN ("%filename1%") DO (
 CALL :sub %%b
)
SETLOCAL ENABLEDELAYEDEXPANSION 
(
FOR  /F "tokens=1,2delims==" %%b In ('set # 2^>Nul') DO (
 SET "line=%%cx%%b"
 ECHO !line:#= !
)
)>summary.txt
endlocal
type summary.txt
GOTO :EOF

:sub
SET "quantity=%1"
SET "line=%*"
IF /i "%quantity:~-1%"=="x" (SET /a quantity=%quantity:~0,-1%&SET "line=%line:* =%") ELSE SET quantity=1
IF %quantity%==0 SET /a quantity=1&SET "line=%*"
SET /a #%line: =#%+=quantity
GOTO :eof

不同的方法..。

票数 1
EN

Stack Overflow用户

发布于 2022-06-18 23:26:56

又一个!

代码语言:javascript
复制
@echo off
setlocal EnableDelayedExpansion

for /F "delims=" %%l in (test.txt) do for /F "tokens=1*" %%a in ("%%l") do (
   set "first=%%a"
   if "!first:~-1!" equ "x" (set /A "num=!first:~0,-1!") else set "num=0"
   if !num! equ 0 (
      set "rest=%%l"
      set /A "count[!rest: =_!]+=1"
   ) else (
      set "rest=%%b"
      set /A "count[!rest: =_!]+=num"
   )
)

(for /F "tokens=2* delims=[]=" %%a in ('set count[') do (
   set "item=%%a"
   if %%b equ 1 (
      echo !item:_= !
   ) else (
      echo %%bx !item:_= !
   )
)) > summary.txt
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72672485

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档