Board logo

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

作者: hepeisheng    时间: 2020-8-1 11:33     标题: [已解决]批处理如何计算出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:48

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

作者: xczxczxcz    时间: 2020-8-2 11:15

回复 2# yhcfsr


    复杂化了,再简化,应该2一3句就可以了。
作者: ivor    时间: 2020-8-2 21:32

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

作者: Blakelee    时间: 2020-8-2 23:11

回复 4# ivor


    这个是python代码?
作者: ivor    时间: 2020-8-3 09:59

回复 5# Blakelee


    是的啊
作者: amwfjhh    时间: 2020-8-3 10:51

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

作者: amwfjhh    时间: 2020-8-4 10:50

-0.69%不就是-0.0069么?
作者: hepeisheng    时间: 2020-8-4 19:43

是,但不直观。




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