找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 23675|回复: 8

[文本处理] 批处理来处理文本每行数字去小数点,四舍五入怎么解决[已解决]

[复制链接]
发表于 2023-11-27 21:28:01 | 显示全部楼层 |阅读模式
本帖最后由 shchaoge 于 2023-11-28 17:43 编辑

批处理来处理文本每行数字去小数点,四舍五入怎么解决?
1|600000|20231127|77.53
1|600004|20231127|37.28
1|600006|20231127|797.73
1|600007|20231127|12.57
1|600008|20231127|25.30
1|600009|20231127|89.64
1|600010|20231127|186.74
1|600011|20231127|67.88
1|600012|20231127|56.58
1|600015|20231127|213.78
1|600016|20231127|55.34
1|600017|20231127|42.66
1|600018|20231127|67.35
1|600019|20231127|162.02
1|600020|20231127|2.04
1|600021|20231127|21.32
1|600022|20231127|308.66
1|600023|20231127|90.00
1|600025|20231127|28.94
1|600026|20231127|44.38
1|600027|20231127|34.43
发表于 2023-11-27 22:02:29 | 显示全部楼层
原文件1.txt
  1. powershell -c "gc .\1.txt|%{[system.String]::Join('|',[int[]]$_.split('|'))}>2.txt"
复制代码
发表于 2023-11-28 10:03:50 | 显示全部楼层
回复 1# shchaoge

用第3方工具gawk( http://bcn.bathome.net/tool/4.1.0/gawk.exe )实现方法如下:

  1. gawk -F"|" -v"OFS=|" "{$NF=int($NF+0.5)}1" 1.txt>2.txt
复制代码
发表于 2023-11-28 10:53:51 | 显示全部楼层
回复 1# shchaoge
  1. @echo off
  2. set "OldFile=1.txt"
  3. set "NewFile=2.txt"
  4. cd /d "%~dp0"
  5. setlocal enabledelayedexpansion
  6. (for /f "tokens=1-5 delims=|." %%a in ('type "%OldFile%"') do (
  7.     if "1%%e" geq "15" (
  8.         set /a n=%%d+1
  9.     ) else (
  10.         set n=%%d
  11.     )
  12.     echo %%a^|%%b^|%%c^|!n!
  13. ))>"%NewFile%"
复制代码
发表于 2023-11-28 13:16:39 | 显示全部楼层
  1. gawk -F"|" -v OFS="|" "{for(i=1;i<=NF;i++)$i=sprintf("%%.0f", $i)}1" a.txt > b.txt
复制代码
发表于 2023-11-28 13:19:41 | 显示全部楼层
  1. @if(0)==(0) echo off
  2. type a.txt | cscript //nologo //e:jscript "%~f0"
  3. pause & exit
  4. @end

  5. var s = WSH.StdIn.ReadAll().replace(/\d+\.\d+/g,function(s0){return Math.round(1*s0)});
  6. WSH.Echo(s);
复制代码
发表于 2023-11-28 13:29:17 | 显示全部楼层
本帖最后由 WHY 于 2023-11-29 13:59 编辑
  1. PowerShell "$s = (gc a.txt -ReadCount 0) -join "`r`n"; $s = [regex]::Replace($s, '(?>[0-9]+)\.[0-9]+',{[Math]::Round($args[0].Value)}); sc b.txt -Value $s"
复制代码
发表于 2023-11-28 13:29:42 | 显示全部楼层
本帖最后由 wanghan519 于 2023-11-28 13:32 编辑

四舍五入是个比较麻烦的问题,js powershell py都有decimal类,消除浮点误差,然后考虑四舍五入还是四舍六入五成双。。。
 楼主| 发表于 2023-11-28 17:41:23 | 显示全部楼层
谢谢各位大佬   给的代码简单要好用   搞定啦
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 09:00 , Processed in 0.019504 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表