标题: [已解决]50人民币求助txt文本进行分类 [打印本页]
作者: 309597483@qq.co 时间: 2019-5-23 07:41 标题: [已解决]50人民币求助txt文本进行分类
本帖最后由 309597483@qq.co 于 2019-5-23 08:40 编辑
具体报酬:50元人民币
支付方式:支付宝,微信转账
联系方式:QQ 309597483
有效期限:2019年5月25日之前
需求描述:
作者: 309597483@qq.co 时间: 2019-5-23 07:42
[张三]
语文=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】
作者: zaqmlp 时间: 2019-5-23 08:15
- @echo off
- set info=互助互利,支付宝扫码头像,感谢赞助
- rem 有问题,可加QQ956535081及时沟通
- title %info%
- cd /d "%~dp0"
- set "file=成绩表.txt"
- for /f "skip=1 delims=" %%a in ('type "%file%"') do (
- set "line1=%%a"
- setlocal enabledelayedexpansion
- if "!line1:~,1!" equ "[" goto end
- endlocal
- for /f "tokens=1* delims==" %%b in ("%%a") do (
- echo;%%b
- (for /f "delims=" %%e in ('type "%file%"') do (
- set "line2=%%e"
- setlocal enabledelayedexpansion
- if "!line2:~,1!" equ "[" echo;%%e
- for /f "tokens=1* delims==" %%g in ("!line2!") do (
- if "%%b" equ "%%g" echo;!line2!
- )
- endlocal
- ))>"%%b.txt"
- )
- )
- :end
- echo;%info%
- pause
复制代码
作者: 523066680 时间: 2019-5-23 12:06
早上处理的,题主实际资料要多一些,改动不大。- use Encode;
- use File::Slurp;
- my @text = read_file("src.txt");
-
- my %main;
- my $ref;
- my @order;
- my %item;
- for my $e ( @text )
- {
- $e=~s/\r?\n$//;
- if ( $e =~/^\[/ ) {
- $main{$e} = {};
- push @order, $e;
- $ref = $main{$e};
- } else {
- if ($e =~ /^(.*)=/) { # 可能有空白项
- $item{$1} = 1;
- $ref->{$1} = $e;
- }
- }
- }
-
- # 按 item 处理
- for my $type ( keys %item ) {
- my $fname = $type .".txt";
- my $buff = "";
- for my $name ( @order )
- {
- next unless (exists $main{$name}->{$type});
- $buff .= $name ."\r\n". $main{$name}->{$type} ."\r\n";
- }
- write_file( $fname, {binmode=>":raw"}, $buff );
- }
复制代码
-------------------------------
已支持论坛 10 元 (支付宝)
流水号 20190523200040011100480062006406
作者: Batcher 时间: 2019-5-23 12:20
回复 4# 523066680
确认收到。感谢你对论坛的支持!捐助分已添加。
作者: amwfjhh 时间: 2019-5-23 13:01
本帖最后由 amwfjhh 于 2019-5-23 13:45 编辑
zaqmlp 发表于 2019-5-23 08:15
Great!!!
作者: ivor 时间: 2019-5-23 13:52
本帖最后由 ivor 于 2019-5-23 19:33 编辑
- [regex]::Matches((Get-Content .\成绩表.txt -Raw -Encoding UTF8),'\[[\s\S]+?(?=\[|$)') | %{
- $name = [regex]::Matches($_,"\[.*\]")
- $score = [regex]::Matches($_,".*=.*")
- foreach($s in $score){
- $fileName = [regex]::Matches($s,".+(?==)")
- Write-Output $name.Value >> $fileName".txt"
- Write-Output $s.Value >>$fileName".txt"
- }
-
- }
复制代码
感谢amwfjhh:指正,已修复“最后一个人的数据”的问题
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |