[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[数值计算] [已解决]批处理如何计算出txt文本里每一行数字平均数

本帖最后由 hepeisheng 于 2020-8-7 23:42 编辑

在一个文件夹裏,有一个txt文件,和一个bat文件,双击bat文件,读取txt文件每行的数字求平均数,并写在txt文件的后面,如正确答案=-0.69%。有些正数可能没有前面的+号。

txt文本格式如下:

1.85%

1.68%

1.27%

+1.02%

+0.82%

+0.81%

+0.00%

+0.00%

-0.08%

-0.12%

-0.24%

-0.31%

-0.32%

-0.37%

-0.37%

-0.39%

-0.56%

-0.61%

-0.64%

-0.64%

-0.65%

-1.06%

-1.41%

-1.44%

-1.94%

-1.98%

-2.16%

-2.30%

-2.42%

-8.01%

本帖最后由 yhcfsr 于 2020-8-2 10:52 编辑

系统要求:WIN7及以上
文件类型:bat
  1. @Powershell "& {[ScriptBlock]::Create("'#' + ([io.file]::ReadAllText('%~f0',[text.encoding]::Default))").Invoke()}" & pause & exit
  2. $files = [io.directory]::GetFiles('./', '*.txt', 'AllDirectories');#获取所有txt文件
  3. foreach($file in $files)
  4. {
  5.     [double] $result  = 0.0;
  6.     [int]    $count   = 0;
  7.     [System.Collections.ArrayList] $content = [io.file]::ReadAllLines($file);#读取文件
  8.     foreach($line in $content)
  9.     {
  10.         if($line -match '%')
  11.         {
  12.             $result +=[double]($line -replace '%');
  13.             $count++;   
  14.         }   
  15.     }
  16.     [void] $content.Add("`r`n={0:0.00}%" -f ($result/$count));
  17.     [io.file]::WriteAllLines($file, $content);//保存文件
  18. }
复制代码
1

评分人数

QQ 33892006

TOP

回复 2# yhcfsr


    复杂化了,再简化,应该2一3句就可以了。
QQ: 己阵亡
脚本优先 [PowerShell win10]

TOP

  1. import re, numpy as np
  2. with open('2.txt','r+') as file:
  3.     file.write(str(np.average([float(result.group(0)) for i in file if isinstance((result := re.search('[+-]?\d?\.?\d+(?=%)',i)),re.Match)])))
复制代码
1

评分人数

#&cls&@powershell "Invoke-Expression ([Io.File]::ReadAllText('%~0',[Text.Encoding]::UTF8))" &pause&exit

TOP

回复 4# ivor


    这个是python代码?
From zero to one!

TOP

回复 5# Blakelee


    是的啊
#&cls&@powershell "Invoke-Expression ([Io.File]::ReadAllText('%~0',[Text.Encoding]::UTF8))" &pause&exit

TOP

本帖最后由 amwfjhh 于 2020-8-3 11:05 编辑
  1. @if (0)==(0) echo off & setlocal enabledelayedexpansion
  2. set "nC=0" & set "nI=0" & (for /f "delims=" %%i in ('type num.txt') do ((for /f "delims=" %%a in ('cscript -nologo -e:jscript %~s0 "!nC!" "%%i" "+"') do set "nC=%%a") & set /a nI+=1 )) & cscript -nologo -e:jscript %~s0 "!nc!" "!nI!" "/" && pause && exit
  3. @end
  4. (function(args) {WScript.Echo(eval((/%/.test(args(0))?parseFloat(args(0))/100:parseFloat(args(0)))+args(2)+(/%/.test(args(1))?parseFloat(args(1))/100:parseFloat(args(1)))).toString());})(WScript.Arguments)
复制代码
1

评分人数

    • hepeisheng: 正确答案应该是=-0.69%,你的小数点后多了2个 ...技术 + 1
echo,hP1X500P[PZBBBfh#b##fXf-V@`$fPf]f3/f1/5++u5x>in.com

TOP

-0.69%不就是-0.0069么?
echo,hP1X500P[PZBBBfh#b##fXf-V@`$fPf]f3/f1/5++u5x>in.com

TOP

是,但不直观。

TOP

返回列表