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

[文本处理] 批处理如何将一组字符串打乱原有顺序?

[复制链接]
发表于 2016-2-15 20:34:47 | 显示全部楼层 |阅读模式
爱民 玉伟 伟博 如祥 良智 富强 光耀 智博 来德 金吉 李松海

批处理结果也是这样就行,只是顺序打乱就可以。谢谢!
发表于 2016-2-16 00:20:26 | 显示全部楼层
本帖最后由 ivor 于 2016-2-16 01:18 编辑

回复 1# mick00034

python传送门:https://www.python.org/downloads/

   python3.5.1 环境编写:
  1. import os, random

  2. # path = os.getcwd()
  3. # 读取t.txt 文本中的字符串,随机输出到_a.txt中
  4. #欲读取的文本格式为ANSI或者gbk编码格式
  5. nextLine=0
  6. rFile = open('t.txt', 'r')
  7. text = rFile.readlines()
  8. rFile.close()
  9. wFile = open('_a.txt','w')
  10. for line in text:
  11.     a = (line.strip('\n')).split(" ") # 过滤换行符,使用空格分割
  12.     while len(a) > 0: # 数组a如果有元素继续循环
  13.         nextLine += 1
  14.         r = random.randint(0, len(a) - 1) # 随机读取数组元素
  15.         wFile.write(a[r] + ' ')
  16.         del a[r] # 删除掉写入完的元素
  17.         if (nextLine % 10) == 0: # 10个元素,加换行符
  18.             wFile.write('\n')
  19. wFile.close()
  20. print("新文本已保存在 _a.txt")

复制代码

评分

参与人数 1技术 +1 收起 理由
CrLf + 1 666

查看全部评分

发表于 2016-2-16 02:08:55 | 显示全部楼层
  1. @mshta http://bathome.net/s/hta/?group=base,hide WSH.StdIn.ReadAll().split(/\s+/).sort(function(){return Math.random()-0.5}).join(' ') <a.txt >_a.txt
复制代码
发表于 2016-2-16 10:46:27 | 显示全部楼层
我发现二楼完全是来Python练手的
那我也来练手
  1. #lang racket

  2. (require 2htdp/batch-io)
  3. (for-each (lambda (x)
  4.             (write-file "new.txt" x))
  5.           (shuffle (read-words "a.txt")))
复制代码

评分

参与人数 1技术 +1 收起 理由
CrLf + 1 666

查看全部评分

发表于 2016-2-16 11:50:30 | 显示全部楼层
  1. """
  2. 如何将一组字符串打乱原有顺序
  3. http://bbs.bathome.net/thread-39382-1-1.html
  4. 2016年2月16日 11:25:56 依山居
  5. """

  6. #方法1 利用集合无序的特性乱序,每次程序重新运行输出的序是不一样的。
  7. #同理可以字典键唯一且无序的也是可以的。
  8. s="爱民 玉伟 伟博 如祥 良智 富强 光耀 智博 来德 金吉 李松海"
  9. print(set(s.split()))

  10. #方法2 优先推荐python内置random.sample()
  11. import random
  12. ss="爱民 玉伟 伟博 如祥 良智 富强 光耀 智博 来德 金吉 李松海"
  13. ns=ss.split()

  14. #运行可见下面相同的代码输出内容的顺序不一样。
  15. rs=random.sample(ns,len(ns))
  16. print(rs)

  17. rs=random.sample(ns,len(ns))
  18. print(rs)

  19. try:
  20.     input("回车退出")
  21. except SyntaxError:
  22.     pass
复制代码

评分

参与人数 1技术 +1 收起 理由
CrLf + 1 666

查看全部评分

发表于 2016-2-16 12:51:53 | 显示全部楼层
本帖最后由 ivor 于 2016-2-16 12:53 编辑

回复 5# codegay
  1. random.shuffle(items)
复制代码
我查了手册,shuffle更适合哟,可以少一行代码,不用再申请一个数组了

评分

参与人数 1技术 +1 收起 理由
codegay + 1 1

查看全部评分

发表于 2016-2-16 13:06:47 | 显示全部楼层
回复 6# ivor


    感谢。确实更好。
发表于 2016-2-16 23:19:34 | 显示全部楼层
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "str=爱民 玉伟 伟博 如祥 良智 富强 光耀 智博 来德 金吉 李松海"
  4. for %%i in (%str%) do set /a n+=1 & set "_!random!_!n!=%%i"
  5. for /f "tokens=2delims==" %%i in ('set _') do set "s=!s! %%i"
  6. echo;!s:~1!
  7. pause
复制代码
  1. $a = '爱民 玉伟 伟博 如祥 良智 富强 光耀 智博 来德 金吉 李松海' -Split '\s+'
  2. (get-Random -Input $a -Count $a.length) -join ' '
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-18 02:00 , Processed in 0.022670 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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