找回密码
 加入
搜索
查看: 8982|回复: 20

[效率算法] 读取N篇txt文档的内容随机生成另外一篇文档(已解决)

 火.. [复制链接]
发表于 2015-5-12 14:42:13 | 显示全部楼层 |阅读模式
本帖最后由 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[1] & @YEAR & @MON & @MDAY & @HOUR & @MIN & @SEC & ".txt", $aLine[$i - 1] & @CRLF)
        Next
        FileDelete('零时.txt')
读取txt文档1,2,3,4 生成文档5,希望文档5里面的顺序是随机的。感谢

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2015-5-12 17:10:55 | 显示全部楼层

3

回复 1# ak47gglllk

一個陣列放 1,2,3,4 文檔路徑檔名

隨機亂數 產生 0-3  讀取陣列 (0-3) 的檔案內容

合併成檔案五

那就隨機了
 楼主| 发表于 2015-5-12 18:01:28 | 显示全部楼层
回复 2# kk_lee69


    不是很明白,能给你例子么,谢谢,非常感谢。上回看了你的数据库例子,启发很大。再次感谢
发表于 2015-5-13 15:24:19 | 显示全部楼层
回复 1# ak47gglllk


    你有N个TXT,你可以建立一个数组,把读取的内容存进去,然后使用_ArraySwap ,交换两个项目,至于是哪两个你使用随机产生的两个数Random(1,N,1),多交换几次,次数越多越多越乱,然后使用_ArrayToString 把那个很乱的数组转换成字符串,你再写进一个新的TXT,搞定
 楼主| 发表于 2015-5-13 15:52:13 | 显示全部楼层
回复 4# ap112


    能给我个简单的例子么,谢谢。不怎么懂。
发表于 2015-5-13 20:51:58 | 显示全部楼层
回复  ak47gglllk

一個陣列放 1,2,3,4 文檔路徑檔名

隨機亂數 產生 0-3  讀取陣列 (0-3) 的檔案內容 ...
kk_lee69 发表于 2015-5-12 17:10


2L的意思是这样子描述吗?
例如:创建数组 a[4], a[0]=文档1路径,a[1]=文档2路径,a[2]=文档3路径,a[3]=文档4路径,获取一个0-3范围的随机数i,读取a值操作该文档写入新的文档5中;将剩下的3个文档路径重新组成一个数组,继续获取一个0-2范围的随机数ii,读取a[ii]值操作该文档写入新的文档5中;继续重复以上,便得到你发的图的那种效果了
发表于 2015-5-14 09:07:17 | 显示全部楼层
#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[0]]
For $i = 1 To $file[0]
        $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)
 楼主| 发表于 2015-5-14 10:45:26 | 显示全部楼层
回复 7# ap112
#include <Array.au3>
#include <File.au3>
$file = _FileListToArray("D:\文章打包","*.txt")
Dim $arr[$file[0]]
For $i = 1 To $file[0]
        $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)
我这个样子没有随机性,求解惑。它只是把所有的文档全部合并到一个里面了。
发表于 2015-5-14 11:07:38 | 显示全部楼层
回复 8# ak47gglllk


    仔细看看你的12行和我的20行有什么不一样吗?
 楼主| 发表于 2015-5-14 11:30:00 | 显示全部楼层
回复 9# ap112

按照你的那个写,会报错 难道是版本问题?你用的是哪一个版本的嘛。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2015-5-14 14:26:30 | 显示全部楼层
回复 10# ak47gglllk


  不是不是版本问题,要不不是用这个函数,自己写一个
#include <Array.au3>
#include <File.au3>
$file = _FileListToArray("D:\文章打包","*.txt")
Dim $arr[$file[0]]
For $i = 1 To $file[0]
        $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)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×

评分

参与人数 1金钱 +20 收起 理由
ak47gglllk + 20 谢谢,有你们的帮助,我才能坚持下去

查看全部评分

发表于 2015-5-14 14:28:28 | 显示全部楼层
回复 10# ak47gglllk


    其实有些函数可以自己尝试实现一下,例如
$c = $arr[$a]
        $arr[$a] = $arr[$b]
        $arr[$b] = $c
就可以代替
_ArraySwap($arr[$a],$arr[$b])
发表于 2015-5-14 16:17:43 | 显示全部楼层
本帖最后由 ila 于 2015-5-14 16:19 编辑

来凑热闹。
看看用上面帖子里的字典片段代码(借用下  ),
从选择的几个文本里随机顺序复制黏贴到新文档。

花了一段时间写,不贴上来浪费时间。。。。。。
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[0]))
        $o_Dic(string($i_N))="" 
until $o_Dic.count=$split[0]-2 
$a_Arr=$o_Dic.keys


For $l=0 To  $split[0]-2
        Dim $bb=$a_Arr[$l]
_FileReadToArray($split[1]&$split[$bb],$array)
        If @error=1 Or @error =2 Then ExitLoop
        For $lla=1 To $array[0]

                FileWriteLine($all,$array[$lla])

        Next
Next

                FileClose($all)
        Run (@ScriptDir&"\allinone.txt")

评分

参与人数 1金钱 +20 收起 理由
ak47gglllk + 20 感谢。有你们的帮助,我才能坚持下去

查看全部评分

 楼主| 发表于 2015-5-14 16:59:25 | 显示全部楼层
回复 11# ap112


    感谢,完美的解决问题,非常感谢
 楼主| 发表于 2015-5-14 17:00:06 | 显示全部楼层
回复 12# ap112


    恩,谢谢,半路出家,学习也是断断续续额的,我要加油努力了,谢谢。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-6 20:57 , Processed in 0.085139 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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