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

[已解决]50人民币求助txt文本进行分类

  [复制链接]
发表于 2019-5-23 07:41:16 | 显示全部楼层 |阅读模式
本帖最后由 309597483@qq.co 于 2019-5-23 08:40 编辑

具体报酬:50元人民币
支付方式:支付宝,微信转账
联系方式:QQ 309597483
有效期限:2019年5月25日之前
需求描述:
 楼主| 发表于 2019-5-23 07:42:23 | 显示全部楼层
[张三]
语文=85
数学=90
英语=22
化学=65
[李四]
语文=82
数学=75
英语=68
化学=88
[小明]
语文=70
数学=58
英语=96
化学=100
[小李]
语文=58
数学=77
英语=63
化学=64

---------这个是一个【成绩表.txt】文本,数据很多,暂举出4个例子
求助怎么进行批量分类,并输出对应的txt文本


------------------输出结果 1---------------------
[张三]
语文=85
[李四]
语文=82
[小明]
语文=70
[小李]
语文=58
--------输出保存为【语文.txt】

------------------输出结果 2---------------------
[张三]
数学=90
[李四]
数学=75
[小明]
数学=58
[小李]
数学=77
--------输出保存为【数学.txt】

------------------输出结果 3---------------------
[张三]
英语=22
[李四]
英语=68
[小明]
英语=96
[小李]
英语=63
--------输出保存为【英语.txt】

------------------输出结果 4---------------------
[张三]
化学=65
[李四]
化学=88
[小明]
化学=100
[小李]
化学=64
--------输出保存为【化学.txt】
发表于 2019-5-23 08:15:45 | 显示全部楼层
  1. @echo off
  2. set info=互助互利,支付宝扫码头像,感谢赞助
  3. rem 有问题,可加QQ956535081及时沟通
  4. title %info%
  5. cd /d "%~dp0"
  6. set "file=成绩表.txt"
  7. for /f "skip=1 delims=" %%a in ('type "%file%"') do (
  8.     set "line1=%%a"
  9.     setlocal enabledelayedexpansion
  10.     if "!line1:~,1!" equ "[" goto end
  11.     endlocal
  12.     for /f "tokens=1* delims==" %%b in ("%%a") do (
  13.         echo;%%b
  14.         (for /f "delims=" %%e in ('type "%file%"') do (
  15.             set "line2=%%e"
  16.             setlocal enabledelayedexpansion
  17.             if "!line2:~,1!" equ "[" echo;%%e
  18.             for /f "tokens=1* delims==" %%g in ("!line2!") do (
  19.                 if "%%b" equ "%%g" echo;!line2!
  20.             )
  21.             endlocal
  22.         ))>"%%b.txt"
  23.     )
  24. )
  25. :end
  26. echo;%info%
  27. pause
复制代码

评分

参与人数 1PB +6 技术 +1 收起 理由
netbenton + 6 + 1 是啊,好久不见了

查看全部评分

发表于 2019-5-23 12:06:27 | 显示全部楼层
早上处理的,题主实际资料要多一些,改动不大。
  1. use Encode;
  2. use File::Slurp;
  3. my @text = read_file("src.txt");

  4. my %main;
  5. my $ref;
  6. my @order;
  7. my %item;
  8. for my $e ( @text )
  9. {
  10.     $e=~s/\r?\n$//;
  11.     if ( $e =~/^\[/ ) {
  12.         $main{$e} = {};
  13.         push @order, $e;
  14.         $ref = $main{$e};
  15.     } else {
  16.         if ($e =~ /^(.*)=/) {  # 可能有空白项
  17.             $item{$1} = 1;
  18.             $ref->{$1} = $e;
  19.         }
  20.     }
  21. }

  22. # 按 item 处理
  23. for my $type ( keys %item ) {
  24.     my $fname = $type .".txt";
  25.     my $buff = "";
  26.     for my $name ( @order )
  27.     {
  28.         next unless (exists $main{$name}->{$type});
  29.         $buff .= $name ."\r\n". $main{$name}->{$type} ."\r\n";
  30.     }
  31.     write_file( $fname, {binmode=>":raw"}, $buff );
  32. }
复制代码
-------------------------------
已支持论坛 10 元 (支付宝)
流水号 20190523200040011100480062006406

评分

参与人数 1PB +10 技术 +1 收起 理由
netbenton + 10 + 1 是啊,好久不见了,哈哈😄

查看全部评分

发表于 2019-5-23 12:20:29 | 显示全部楼层
回复 4# 523066680


    确认收到。感谢你对论坛的支持!捐助分已添加。
发表于 2019-5-23 13:01:44 | 显示全部楼层
本帖最后由 amwfjhh 于 2019-5-23 13:45 编辑
zaqmlp 发表于 2019-5-23 08:15



    Great!!!
发表于 2019-5-23 13:52:52 | 显示全部楼层
本帖最后由 ivor 于 2019-5-23 19:33 编辑
  1. [regex]::Matches((Get-Content .\成绩表.txt -Raw -Encoding UTF8),'\[[\s\S]+?(?=\[|$)') | %{
  2.     $name = [regex]::Matches($_,"\[.*\]")
  3.     $score = [regex]::Matches($_,".*=.*")
  4.     foreach($s in $score){
  5.         $fileName = [regex]::Matches($s,".+(?==)")
  6.         Write-Output $name.Value >> $fileName".txt"
  7.         Write-Output $s.Value >>$fileName".txt"
  8.     }

  9. }
复制代码
感谢amwfjhh:指正,已修复“最后一个人的数据”的问题

评分

参与人数 2技术 +2 收起 理由
amwfjhh + 1 而且效率很高, 好像漏了最后一个人的数据 ...
523066680 + 1

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 05:23 , Processed in 0.021639 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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