ak47gglllk 发表于 2015-5-12 14:42:13

读取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里面的顺序是随机的。感谢

kk_lee69 发表于 2015-5-12 17:10:55

3

回复 1# ak47gglllk

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

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

合併成檔案五

那就隨機了

ak47gglllk 发表于 2015-5-12 18:01:28

回复 2# kk_lee69


    不是很明白,能给你例子么,谢谢,非常感谢。上回看了你的数据库例子,启发很大。再次感谢{:face (355):}

ap112 发表于 2015-5-13 15:24:19

回复 1# ak47gglllk


    你有N个TXT,你可以建立一个数组,把读取的内容存进去,然后使用_ArraySwap ,交换两个项目,至于是哪两个你使用随机产生的两个数Random(1,N,1),多交换几次,次数越多越多越乱,然后使用_ArrayToString 把那个很乱的数组转换成字符串,你再写进一个新的TXT,搞定

ak47gglllk 发表于 2015-5-13 15:52:13

回复 4# ap112


    能给我个简单的例子么,谢谢。不怎么懂。

user030 发表于 2015-5-13 20:51:58

回复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中;继续重复以上,便得到你发的图的那种效果了

ap112 发表于 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]
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)

ak47gglllk 发表于 2015-5-14 10:45:26

回复 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)我这个样子没有随机性,求解惑。它只是把所有的文档全部合并到一个里面了。

ap112 发表于 2015-5-14 11:07:38

回复 8# ak47gglllk


    仔细看看你的12行和我的20行有什么不一样吗?

ak47gglllk 发表于 2015-5-14 11:30:00

回复 9# ap112

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

ap112 发表于 2015-5-14 14:26:30

回复 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)

ap112 发表于 2015-5-14 14:28:28

回复 10# ak47gglllk


    其实有些函数可以自己尝试实现一下,例如$c = $arr[$a]
        $arr[$a] = $arr[$b]
        $arr[$b] = $c就可以代替_ArraySwap($arr[$a],$arr[$b])

ila 发表于 2015-5-14 16:17:43

本帖最后由 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")

ak47gglllk 发表于 2015-5-14 16:59:25

回复 11# ap112


    感谢,完美的解决问题,非常感谢

ak47gglllk 发表于 2015-5-14 17:00:06

回复 12# ap112


    恩,谢谢,半路出家,学习也是断断续续额的,我要加油努力了,谢谢。
页: [1] 2
查看完整版本: 读取N篇txt文档的内容随机生成另外一篇文档(已解决)