Board logo

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

作者: shchaoge    时间: 2023-11-27 21:28     标题: 批处理来处理文本每行数字去小数点,四舍五入怎么解决[已解决]

本帖最后由 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
作者: pd1    时间: 2023-11-27 22:02

原文件1.txt
  1. powershell -c "gc .\1.txt|%{[system.String]::Join('|',[int[]]$_.split('|'))}>2.txt"
复制代码

作者: hfxiang    时间: 2023-11-28 10:03

回复 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
复制代码

作者: ShowCode    时间: 2023-11-28 10:53

回复 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%"
复制代码

作者: WHY    时间: 2023-11-28 13:16

  1. gawk -F"|" -v OFS="|" "{for(i=1;i<=NF;i++)$i=sprintf(\"%%.0f\", $i)}1" a.txt > b.txt
复制代码

作者: WHY    时间: 2023-11-28 13:19

  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);
复制代码

作者: WHY    时间: 2023-11-28 13:29

本帖最后由 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"
复制代码

作者: wanghan519    时间: 2023-11-28 13:29

本帖最后由 wanghan519 于 2023-11-28 13:32 编辑

四舍五入是个比较麻烦的问题,js powershell py都有decimal类,消除浮点误差,然后考虑四舍五入还是四舍六入五成双。。。

作者: shchaoge    时间: 2023-11-28 17:41

谢谢各位大佬   给的代码简单要好用   搞定啦




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2