读取N篇txt文档的内容随机生成另外一篇文档(已解决)
本帖最后由 ak47gglllk 于 2015-5-14 17:06 编辑If FileExists(@DesktopDir & "\零时.txt") = 1 Then
FileDelete(@DesktopDir & "\零时.txt")
EndIf
Local $aFileList = _FileListToArray("D:\短信", "*")
Local $iRows = UBound($aFileList)
For $i = 1 To $iRows - 1 Step 1
$aa = FileOpen("D:\短信\" & $aFileList[$i])
FileWrite(@DesktopDir & "\零时.txt", FileRead($aa))
If FileExists(@DesktopDir & "\零时.txt") = 1 Then
FileClose($aa)
EndIf
Next
Local $aLine = StringRegExp(FileRead('零时.txt'), '\V+', 3)
If @error Then
MsgBox(64, "错误", "错误")
Return
EndIf
Local $iC = UBound($aLine) - 1, $i, $iRd, $vTmp
For $i = 0 To $iC
$iRd = Random($i, $iC, 1) ;随机产生浮点数
$vTmp = $aLine[$i]
$aLine[$i] = $aLine[$iRd]
$aLine[$iRd] = $vTmp
Next
For $i = 1 To $iC
FileWrite($lujing & @YEAR & @MON & @MDAY & @HOUR & @MIN & @SEC & ".txt", $aLine[$i - 1] & @CRLF)
Next
FileDelete('零时.txt')读取txt文档1,2,3,4 生成文档5,希望文档5里面的顺序是随机的。感谢
3
回复 1# ak47gglllk一個陣列放 1,2,3,4 文檔路徑檔名
隨機亂數 產生 0-3讀取陣列 (0-3) 的檔案內容
合併成檔案五
那就隨機了 回复 2# kk_lee69
不是很明白,能给你例子么,谢谢,非常感谢。上回看了你的数据库例子,启发很大。再次感谢{:face (355):} 回复 1# ak47gglllk
你有N个TXT,你可以建立一个数组,把读取的内容存进去,然后使用_ArraySwap ,交换两个项目,至于是哪两个你使用随机产生的两个数Random(1,N,1),多交换几次,次数越多越多越乱,然后使用_ArrayToString 把那个很乱的数组转换成字符串,你再写进一个新的TXT,搞定 回复 4# ap112
能给我个简单的例子么,谢谢。不怎么懂。 回复ak47gglllk
一個陣列放 1,2,3,4 文檔路徑檔名
隨機亂數 產生 0-3讀取陣列 (0-3) 的檔案內容 ...
kk_lee69 发表于 2015-5-12 17:10 http://www.autoitx.com/images/common/back.gif
2L的意思是这样子描述吗?
例如:创建数组 a, a=文档1路径,a=文档2路径,a=文档3路径,a=文档4路径,获取一个0-3范围的随机数i,读取a值操作该文档写入新的文档5中;将剩下的3个文档路径重新组成一个数组,继续获取一个0-2范围的随机数ii,读取a值操作该文档写入新的文档5中;继续重复以上,便得到你发的图的那种效果了 #include <Array.au3>
#include <File.au3>
;;随机产生几个txt,写入和名字一样的内容
$file_num = Random(10,20,1)
For $i = 1 To $file_num
$file_name = FileOpen(@ScriptDir&"\"&$i&".txt",8+1)
FileWrite($file_name,$i)
FileClose($file_name)
Next
;;将txt内容读取到数组
$file = _FileListToArray(@ScriptDir,"*.txt")
Dim $arr[$file]
For $i = 1 To $file
$arr[$i-1] = FileRead(@ScriptDir&"\"&$file[$i])
Next
;;进行随机交换
For $i=0 To 9
$a = Random(0,UBound($arr)-1,1)
$b = Random(0,UBound($arr)-1,1)
If $a<>$b Then _ArraySwap($arr[$a],$arr[$b])
Next
;;将交换后的数组装换为字符串写到新的txt中
$file_zong = FileOpen(@ScriptDir&"\zong.txt",8+1)
FileWrite($file_zong, _ArrayToString($arr,@CRLF))
FileClose($file_zong)
回复 7# ap112 #include <Array.au3>
#include <File.au3>
$file = _FileListToArray("D:\文章打包","*.txt")
Dim $arr[$file]
For $i = 1 To $file
$arr[$i-1] = FileRead("D:\文章打包"&"\"&$file[$i])
Next
;;进行随机交换
For $i=0 To 9
$a = Random(0,UBound($arr)-1,1)
$b = Random(0,UBound($arr)-1,1)
If $a<>$b Then _ArraySwap($arr,$arr[$a],$arr[$b])
Next
;;将交换后的数组装换为字符串写到新的txt中
$file_zong = FileOpen(@YEAR & @MON & @MDAY & @HOUR & @MIN & @SEC&".txt",8+1)
FileWrite($file_zong, _ArrayToString($arr,@CRLF))
FileClose($file_zong)我这个样子没有随机性,求解惑。它只是把所有的文档全部合并到一个里面了。 回复 8# ak47gglllk
仔细看看你的12行和我的20行有什么不一样吗? 回复 9# ap112
按照你的那个写,会报错 难道是版本问题?你用的是哪一个版本的嘛。 回复 10# ak47gglllk
不是不是版本问题,要不不是用这个函数,自己写一个#include <Array.au3>
#include <File.au3>
$file = _FileListToArray("D:\文章打包","*.txt")
Dim $arr[$file]
For $i = 1 To $file
$arr[$i-1] = FileRead("D:\文章打包"&"\"&$file[$i])
Next
_ArrayDisplay($arr)
;;进行随机交换
For $i=0 To 9
$a = Random(0,UBound($arr)-1,1)
$b = Random(0,UBound($arr)-1,1)
$c = $arr[$a]
$arr[$a] = $arr[$b]
$arr[$b] = $c
;If $a<>$b Then _ArraySwap($arr,$arr[$a],$arr[$b])
Next
_ArrayDisplay($arr)
;;将交换后的数组装换为字符串写到新的txt中
$file_zong = FileOpen(@YEAR & @MON & @MDAY & @HOUR & @MIN & @SEC&".txt",8+1)
FileWrite($file_zong, _ArrayToString($arr,@CRLF))
FileClose($file_zong) 回复 10# ak47gglllk
其实有些函数可以自己尝试实现一下,例如$c = $arr[$a]
$arr[$a] = $arr[$b]
$arr[$b] = $c就可以代替_ArraySwap($arr[$a],$arr[$b]) 本帖最后由 ila 于 2015-5-14 16:19 编辑
来凑热闹。
看看用上面帖子里的字典片段代码(借用下{:face (197):}),
从选择的几个文本里随机顺序复制黏贴到新文档。
花了一段时间写,不贴上来浪费时间。。。。。。
3.3.9版本有报错,但结果无误。#Include <File.au3>
#include<array.au3>
If Not FileExists("allinone.txt") Then _FileCreate("allinone.txt")
$all=FileOpen("allinone.txt",1)
Local $array,$dialog
$dialog=FileOpenDialog("file",@DesktopDir&"\","所有文件(*.*)",1+4)
If @error Then MsgBox(4096,"","没有选择文件!")
$split=StringSplit($dialog,"|")
$o_Dic=objcreate("scripting.dictionary")
$o_Dic=objcreate("scripting.dictionary")
Do
$i_N=int(random(2,$split))
$o_Dic(string($i_N))=""
until $o_Dic.count=$split-2
$a_Arr=$o_Dic.keys
For $l=0 To$split-2
Dim $bb=$a_Arr[$l]
_FileReadToArray($split&$split[$bb],$array)
If @error=1 Or @error =2 Then ExitLoop
For $lla=1 To $array
FileWriteLine($all,$array[$lla])
Next
Next
FileClose($all)
Run (@ScriptDir&"\allinone.txt") 回复 11# ap112
感谢,完美的解决问题,非常感谢 回复 12# ap112
恩,谢谢,半路出家,学习也是断断续续额的,我要加油努力了,谢谢。
页:
[1]
2