标题: [文本处理] 批处理如何将一组字符串打乱原有顺序? [打印本页]
作者: mick00034 时间: 2016-2-15 20:34 标题: 批处理如何将一组字符串打乱原有顺序?
爱民 玉伟 伟博 如祥 良智 富强 光耀 智博 来德 金吉 李松海
批处理结果也是这样就行,只是顺序打乱就可以。谢谢!
作者: ivor 时间: 2016-2-16 00:20
本帖最后由 ivor 于 2016-2-16 01:18 编辑
回复 1# mick00034
python传送门:https://www.python.org/downloads/
python3.5.1 环境编写:- import os, random
-
- # path = os.getcwd()
- # 读取t.txt 文本中的字符串,随机输出到_a.txt中
- #欲读取的文本格式为ANSI或者gbk编码格式
- nextLine=0
- rFile = open('t.txt', 'r')
- text = rFile.readlines()
- rFile.close()
- wFile = open('_a.txt','w')
- for line in text:
- a = (line.strip('\n')).split(" ") # 过滤换行符,使用空格分割
- while len(a) > 0: # 数组a如果有元素继续循环
- nextLine += 1
- r = random.randint(0, len(a) - 1) # 随机读取数组元素
- wFile.write(a[r] + ' ')
- del a[r] # 删除掉写入完的元素
- if (nextLine % 10) == 0: # 10个元素,加换行符
- wFile.write('\n')
- wFile.close()
- print("新文本已保存在 _a.txt")
复制代码
作者: CrLf 时间: 2016-2-16 02:08
- @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
复制代码
作者: bailong360 时间: 2016-2-16 10:46
我发现二楼完全是来Python练手的
那我也来练手- #lang racket
-
- (require 2htdp/batch-io)
- (for-each (lambda (x)
- (write-file "new.txt" x))
- (shuffle (read-words "a.txt")))
复制代码
作者: codegay 时间: 2016-2-16 11:50
- """
- 如何将一组字符串打乱原有顺序
- http://bbs.bathome.net/thread-39382-1-1.html
- 2016年2月16日 11:25:56 依山居
- """
-
- #方法1 利用集合无序的特性乱序,每次程序重新运行输出的序是不一样的。
- #同理可以字典键唯一且无序的也是可以的。
- s="爱民 玉伟 伟博 如祥 良智 富强 光耀 智博 来德 金吉 李松海"
- print(set(s.split()))
-
- #方法2 优先推荐python内置random.sample()
- import random
- ss="爱民 玉伟 伟博 如祥 良智 富强 光耀 智博 来德 金吉 李松海"
- ns=ss.split()
-
- #运行可见下面相同的代码输出内容的顺序不一样。
- rs=random.sample(ns,len(ns))
- print(rs)
-
- rs=random.sample(ns,len(ns))
- print(rs)
-
- try:
- input("回车退出")
- except SyntaxError:
- pass
复制代码
作者: ivor 时间: 2016-2-16 12:51
本帖最后由 ivor 于 2016-2-16 12:53 编辑
回复 5# codegay 复制代码
我查了手册,shuffle更适合哟,可以少一行代码,不用再申请一个数组了
作者: codegay 时间: 2016-2-16 13:06
回复 6# ivor
感谢。确实更好。
作者: WHY 时间: 2016-2-16 23:19
- @echo off
- setlocal enabledelayedexpansion
- set "str=爱民 玉伟 伟博 如祥 良智 富强 光耀 智博 来德 金吉 李松海"
- for %%i in (%str%) do set /a n+=1 & set "_!random!_!n!=%%i"
- for /f "tokens=2delims==" %%i in ('set _') do set "s=!s! %%i"
- echo;!s:~1!
- pause
复制代码
- $a = '爱民 玉伟 伟博 如祥 良智 富强 光耀 智博 来德 金吉 李松海' -Split '\s+'
- (get-Random -Input $a -Count $a.length) -join ' '
复制代码
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |