标题: 【已解决】100元批处理txt文本处理格式规整及统计 [打印本页]
作者: arwind 时间: 2019-12-4 16:21 标题: 【已解决】100元批处理txt文本处理格式规整及统计
本帖最后由 arwind 于 2019-12-6 07:39 编辑
具体报酬:100元人民币。
支付方式:支付宝。
联系方式:QQ2019532328。
有效期限:2019年12月31日之前。
需求描述:
(1)系统环境(win10 pro简体版)
(2)想要实现的功能的具体描述
原始内容大概如下:
ID:10001010 [ 档案 上传成功] 文件100001) 次数:1 时间:2019/12/03 8:45:15
ID:10001010 [ 档案 上传失败] 文件:(100001) 次数:1 时间:2019/12/03 8:45:03
ID:10001010 [ 档案 上传成功] 文件:(100002) 次数:1 时间:2019/12/03 8:44:51
ID:10001010 [ 档案 上传失败] 文件:(100002) 次数:1 时间:2019/12/04 17:19:13
ID:10001010 [ 档案 上传成功] 文件:(100003) 次数:1 时间:2019/12/04 17:19:12
ID:10001010 [ 档案 上传失败] 文件:(100003) 次数:1 时间:2019/12/04 17:19:12
ID:10001013 [ 档案 上传成功] 文件:(100004) 次数:1 时间:2019/12/04 17:19:11
ID:10001013 [ 档案 上传失败] 文件:(100004) 次数:1 时间:2019/12/04 17:19:01
文件共有四种,每种都有成功失败的情况,其中100001和100002是一类,100003和100004是二类;
ID号有几千个不连续的数字;日期格式yyyy/MM/dd
处理流程:
1) 对同目录下多个txt文档进行处理,txt里还会有一些其他零碎的内容,第一步先清理数据,删除不含“[ 档案”的行;
2) 第二步删除时间内容在运行脚本日期前一天(或前两天,请保留两份代码并注明)06:00之前的行;
3) 第三步删除“ID:”并替换“ [ 档案 上传”、“] 文件:(”、“) 次数:”、“ 时间:”为“,”;
4)第四步以每个ID号为顺序输出结果到“文件名+运行脚本当天日期+结果.txt”,统计单个txt内容不涉及跨文件统计,内容如:
10001010上传100001成功x次,失败x次;上传100002成功x次,失败x次,共上传x(100001与100002出现的总次数)次
10001010上传100003成功x次,失败x次;上传100004成功x次,失败x次,共上传x(100003与100004出现的总次数)次
及下面其中一种符合的情况内容。
当100001与100002出现的总次数为0时,记录内容:10001010上传100001、100002零次;
当100003与100004出现的总次数为0时,记录内容:10001010上传100003、100004零次;
当100001与100002出现的总次数为不为零且成功次数为零时,记录内容:10001010上传100001、100002完全失败;
当100003与100004出现的总次数为不为零且成功次数为零时,记录内容:10001010上传100003、100004完全失败;
当100001与100002出现的总次数为不为零且成功次数不为零时,记录内容:10001010上传(100001与100002出现的总次数)次,成功(100001+100002成功总次数)次,结余(【100001与100002出现的总次数)-(100001+100002成功总次数)*3】;
当100003与100004出现的总次数为不为零且成功次数不为零时,记录内容:10001010上传(100001与100002出现的总次数)次,成功(100001+100002成功总次数)次,结余(【100001与100002出现的总次数)-(100001+100002成功总次数)*4】;
(3)测试数据及期待结果
(4)其它补充信息
小白不太清楚批处理的功能范围和难度,暂时列的是批处理,无论bat powershell或者其他方式能实现都可以。
作者: zaqmlp 时间: 2019-12-4 19:08
本帖最后由 zaqmlp 于 2019-12-4 19:09 编辑
- <# :
- cls
- @echo off
- set info=互助互利,支付宝扫码头像,感谢赞助
- title %info%
- set "rootpath=%~dp0"
- if "%rootpath:~-1%" equ "\" (set "rootpath=%rootpath:~,-1%")
- cd /d "%rootpath%"
- powershell -NoProfile -ExecutionPolicy bypass "Invoke-Command -ScriptBlock ([ScriptBlock]::Create([IO.File]::ReadAllText('%~f0',[Text.Encoding]::Default))) -Args '%rootpath%'"
- echo;%info%
- pause
- exit
- #>
-
- $ago=-1;
- $today=get-date;
- $agotime=get-date ($today.adddays($ago).toString('yyyy-MM-dd')+' 06:00:00');
- $newfolder=$args[0]+'\#result';
-
- if(-not (test-path -liter $newfolder)){[void](md $newfolder -force)};
- $files=@(dir -liter $args[0]|?{('.txt' -eq $_.Extension) -and ($_ -is [System.IO.FileInfo])});
- for($i=0;$i -lt $files.length;$i++){
- write-host $files[$i];
- [System.Collections.ArrayList]$list=@();
- $dic=New-Object 'System.Collections.Generic.Dictionary[string,Object]';
- $text=[IO.File]::ReadAllLines($files[$i].FullName,[Text.Encoding]::Default);
- for($j=0;$j -lt $text.count;$j++){
- if($text[$j].Contains('[ 档案')){
- $arr=$text[$j].trim() -split '时间:';
- if($arr[1] -ne ''){
- $dt=get-date $arr[1];
- if($dt -ge $agotime){
- $line=$text[$j].trim().replace('ID:','') -replace ' \[ 档案 上传|\] 文件:\(|\) 次数:| 时间:',',';
- $brr=$line.split(',');
- if(-not $dic.ContainsKey($brr[0])){
- $crr=@{
- '100001'=@{'成功'=0;'失败'=0};
- '100002'=@{'成功'=0;'失败'=0};
- '100003'=@{'成功'=0;'失败'=0};
- '100004'=@{'成功'=0;'失败'=0}
- };
- $dic.add($brr[0], $crr);
- }
- $dic[$brr[0]][$brr[2]][$brr[1]]++;
- [void]$list.add($line);
- };
- };
- };
- };
- [IO.File]::WriteAllLines($files[$i].FullName, $list, [Text.Encoding]::Default);
-
- $newfile=$newfolder+'\'+$files[$i].BaseName+'_'+$today.toString('yyyy-MM-dd')+'_结果.txt';
- [System.Collections.ArrayList]$list=@();
- foreach($a in $dic.Keys){
- $b=$dic[$a]['100001']['成功']+$dic[$a]['100001']['失败']+$dic[$a]['100002']['成功']+$dic[$a]['100002']['失败'];
- $line=$a+'上传100001成功'+$dic[$a]['100001']['成功']+'次,失败'+$dic[$a]['100001']['失败']+'次;上传100002成功'+$dic[$a]['100001']['成功']+'次,失败'+$dic[$a]['100001']['失败']+'次,共上传'+$b+'次';
- [void]$list.add($line);
- $c=$dic[$a]['100003']['成功']+$dic[$a]['100003']['失败']+$dic[$a]['100004']['成功']+$dic[$a]['100004']['失败'];
- $line=$a+'上传100003成功'+$dic[$a]['100003']['成功']+'次,失败'+$dic[$a]['100003']['失败']+'次;上传100004成功'+$dic[$a]['100004']['成功']+'次,失败'+$dic[$a]['100004']['失败']+'次,共上传'+$c+'次';
- [void]$list.add($line);
- if($b -eq 0){
- [void]$list.add($a+'上传100001、100002零次');
- }else{
- $d=$dic[$a]['100001']['成功']+$dic[$a]['100002']['成功'];
- if($d -eq 0){
- [void]$list.add($a+'上传100001、100002完全失败');
- }else{
- [void]$list.add($a+'上传100001、100002'+$b+'次,成功'+$d+'次,结余'+($b-$d*3));
- };
- };
- if($c -eq 0){
- [void]$list.add($a+'上传100003、100004零次');
- }else{
- $d=$dic[$a]['100003']['成功']+$dic[$a]['100004']['成功'];
- if($d -eq 0){
- [void]$list.add($a+'上传100003、100004完全失败');
- }else{
- [void]$list.add($a+'上传100003、100004'+$c+'次,成功'+$d+'次,结余'+($c-$d*3));
- };
- };
- };
- [IO.File]::WriteAllLines($newfile, $list, [Text.Encoding]::Default);
- }
复制代码
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |