返回列表 发帖

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

本帖最后由 309597483@qq.co 于 2019-5-23 08:40 编辑

具体报酬:50元人民币
支付方式:支付宝,微信转账
联系方式:QQ 309597483
有效期限:2019年5月25日之前
需求描述:
新手初来乍到

[张三]
语文=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】
新手初来乍到

TOP

@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%
pauseCOPY
1

评分人数

    • netbenton: 是啊,好久不见了PB + 6 技术 + 1
提供bat代写,为你省时省力省事,支付宝扫码头像支付
微信: unique2random

TOP

早上处理的,题主实际资料要多一些,改动不大。
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 );
}COPY
-------------------------------
已支持论坛 10 元 (支付宝)
流水号 20190523200040011100480062006406
1

评分人数

    • netbenton: 是啊,好久不见了,哈哈😄PB + 10 技术 + 1
[url=][/url]

TOP

回复 4# 523066680


    确认收到。感谢你对论坛的支持!捐助分已添加。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

本帖最后由 amwfjhh 于 2019-5-23 13:45 编辑
zaqmlp 发表于 2019-5-23 08:15



    Great!!!
echo,hP1X500P[PZBBBfh#b##fXf-V@`$fPf]f3/f1/5++u5x>in.com

TOP

本帖最后由 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"
    }
}COPY
感谢amwfjhh:指正,已修复“最后一个人的数据”的问题
2

评分人数

    • amwfjhh: 而且效率很高, 好像漏了最后一个人的数据 ...技术 + 1
    • 523066680:技术 + 1

TOP

返回列表