[ 新手练习题 10 ] 批处理实现文本行序重排

文本行序重排
假设原文本:

  1. A B
  2. B D
  3. X C
  4. D M

显示示例:

  1. D M
  2. B D
  3. A B
  4. X C

注意:以上只是一个范例。

若某行甲的首字母与另一行乙的尾字母相同,则行甲要排在行乙前面。
未进行重排的行位置任意。
假定:每一纵列不会出现重复字母,同行字母也不会相同。
也不会出现如 “A B”,“B A” 这样会让排序进入死循环的行。

方法1

@echo off&setlocal enabledelayedexpansion

chcp 65001

@echo off&setlocal enabledelayedexpansion

for /f "tokens=*" %%a in (10-批处理实现文本行序重排.txt) do (

        set str=%%a

        set t=!t!!str:~,1!

        set w=!w!!str:~-1!

        set t!str:~,1!=%%a

)

:lp

(

for %%b in (!t!) do (

        for %%c in ("!t%%~b:~-1!") do (

                set str=!w:*%%~b=!

                if !str! neq !w! (

                        if "!str:%%~c=!" neq "!str!" (

                                set w=%%~c !w: %%~c=!

                                set t=%%b !t: %%b=!

                        )

                )

        )

)

if "%w%" neq "!w!" goto :lp)

for %%b in (!t!) do echo;!t%%~b!

pause

方法2

@echo off&setlocal enabledelayedexpansion

for /f "tokens=1-2" %%a in (10-批处理实现文本行序重排.txt) do (

    set #%%a=%%a %%b&set $%%b=%%a %%b&set _%%b=%%a&set "@%%a=%%a %%b"

    if defined #%%b set "@%%a="

    if defined $%%a set "@!_%%a!="

)

for /f "tokens=2-3 delims== " %%a in ('set @') do (

    echo %%a %%b&set str=%%a&call :px

)

pause&exit

:px

if defined $!str! (

    echo !$%str%!&set str=!$%str%!&set str=!str:~,1!&goto px

)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值