m765555 发表于 2018-9-7 00:57:02

请教两个一维数组双循环执行问题[已解决]

本帖最后由 m765555 于 2018-9-7 20:26 编辑

因工作需要,举个例子说明:
有两个数组,第一个数组用来建立文件夹,第二个数组用来移动文件到第一个数组对应索引文件夹内,顺序对应
如:11.txt放到文件夹名字为"张三"中,22.txt放到文件夹名字为"王五"中,我用了两个for循环,一直没有搞明白两个数组的循环运用,请各位兄弟指点一下。
#include <Array.au3>
#include <MsgBoxConstants.au3>
#include <WinAPIFiles.au3>

Dim $shuzu1=["张三","王五","小牛","麻子","小明","李白","李四","小红","小蒋"]
Dim $shuzu2=["11.txt","22.txt","33.txt","44.txt","55.txt","66.txt","77.txt","88.txt","99.txt"]
_ArrayDisplay($shuzu1,"数组1")
_ArrayDisplay($shuzu2,"数组2")

Local $n=0
For $i= 0 To UBound($shuzu1) -1
      
                For $j=0 To UBound($shuzu2) -1
                        DirCreate($shuzu1[$i])
                  FileMove($shuzu2[$j] & ,@ScriptDir & $shuzu1[$i] & "\")

                $n+=1
                   If $n = UBound($shuzu1) Then
                        ExitLoop
                   EndIf
               
            Next

Next补充一下,主要是想请教一下两个for循环如何对两个数组相同索引对应执行一些操作,其它死方法不想考虑。

下面是我补充的:
可能大家没明白的意思,

非常感谢各位高手指教,其实我这里是我自己举的一个例子,主要是要用于工作中,内网网络,不能上网,可能是我描述得不太清楚
是这样的,通过正则从网站源码中分别提取两组数据分别保存到数组1和数组2中,
数组1的数据类似于上面例子中的文件夹,数组2的数据是单独的文件列表(如上面例子中的单个文件清单),观察发现数组1和数组2的相对应的索引正好是对应,是我所需要的(如数组1与数组2对应,数组1与数组2对应,提取的数据在两个数组中的索引大小都相同,这是我需要的效果),
在这里,大家可能要问,为什么不直接提取到2维数组中呢,因为两个数组,所提取的数据类型等不相同,所以没能提取到2维数组中,也就自然出现了上面例子的一问。

例子中的两个数组都是即时从网站源码中提取的,也就是说数组1和数组2的大小不一定只是9,可能是几百或者几十,但是保存的两个数组大小一定是相等,就是说不会造成运行错误。
我想实现的效果是:从数组1中的数据列表来自动创建对应名字的文件夹,然后再从数组2自动创建位于数组1中创建的对应文件夹内,创建文件夹的目录就不用专门设置,就直接在当前脚本目录中,就是说11.txt创建在张三的这个文件夹内,22.txt创建在王五这个文件夹内,以此类推!(也就是说文件夹和文件都是由脚本来创建的)

上面例子中,我没有搞懂的是“”里面的for循环”,外层的for循环正常,里面的for循环要么一直循环完才跳出,要么就是只循环一次就跳出,
想做到里面的循环和外层循环保持一致,就是说外面循环一层,里面就循环一层,一直循环结束为止。
这样描述不知道各位大大们,能清楚了没有?感谢各位指教一下。




heroxianf 发表于 2018-9-7 02:13:42

如果你的TXT文件都是存在的,用不着嵌套循环吧? 还有就是TXT和创建的文件夹是否在同一目录内?

水木子 发表于 2018-9-7 08:39:32

我觉得你这个没必要用两个数组吧!用一个二维数组可能更方便。
还有,为什么要这样循环两遍呢?没大明白你要做干什么。

tubaba 发表于 2018-9-7 08:48:13

水木子 发表于 2018-9-7 08:39
我觉得你这个没必要用两个数组吧!用一个二维数组可能更方便。
还有,为什么要这样循环两遍呢?没大明白你 ...

因为他已经把自己给绕晕了...学好数组,那autoit也入门一半了

顽固不化 发表于 2018-9-7 09:22:54

本帖最后由 顽固不化 于 2018-9-7 09:53 编辑

如果就这么单一的对应,没必要嵌套
Dim $shuzu1 = ["张三", "王五", "小牛", "麻子", "小明", "李白", "李四", "小红", "小蒋"]
Dim $shuzu2 = ["11.txt", "22.txt", "33.txt", "44.txt", "55.txt", "66.txt", "77.txt", "88.txt", "99.txt"]
For $i = 0 To UBound($shuzu2) -1
      FileMove($shuzu2[$i], $shuzu1[$i] & '\', 9)
Next

heroxianf 发表于 2018-9-7 10:04:26

水木子 发表于 2018-9-7 08:39
我觉得你这个没必要用两个数组吧!用一个二维数组可能更方便。
还有,为什么要这样循环两遍呢?没大明白你 ...

我是过来人按照他的需求他自己最好理解{:face (197):}

skyfree 发表于 2018-9-7 11:18:37

AutoItSetOption('MustDeclareVars', 1)
_Main()
Exit

Func _Main()
       
        Local $aArray[][] = [[''], _
                        ['张三', '11.txt'], _
                        ['王五', '22.txt'], _
                        ['小牛', '33.txt'], _
                        ['麻子', '44.txt'], _
                        ['小明', '55.txt'], _
                        ['李白', '66.txt'], _
                        ['李四', '77.txt'], _
                        ['小红', '88.txt'], _
                        ['小蒋', '99.txt']]
       
        Local $i
        For $i = 1 To UBound($aArray, 1) - 1
                DirCreate(@ScriptDir & '\' & $aArray[$i])
                FileMove(@ScriptDir & '\' & $aArray[$i], @ScriptDir & '\' & $aArray[$i], 1)
        Next
       
       
       
EndFunc   ;==>_Main

afan 发表于 2018-9-7 11:28:29

水木子 发表于 2018-9-7 08:39
我觉得你这个没必要用两个数组吧!用一个二维数组可能更方便。
还有,为什么要这样循环两遍呢?没大明白你 ...
同样的观点~
不知道LZ两个数组的创建方式,如果是手动创建,也需要一一对应的关系,用二维数组是最直观且不易出错的。
如:
Local $a2D = [ _
      ["张三", "11.txt"], _
      ["王五", "22.txt"], _
      ["小牛", "33.txt"]]

m765555 发表于 2018-9-7 13:17:55

非常感谢各位高手指教,其实我这里是我自己举的一个例子,主要是要用于工作中,内网网络,不能上网,可能是我描述得不太清楚
是这样的,通过正则从网站源码中分别提取两组数据分别保存到数组1和数组2中,
数组1的数据类似于上面例子中的文件夹,数组2的数据是单独的文件列表(如上面例子中的单个文件清单),观察发现数组1和数组2的相对应的索引正好是对应,是我所需要的(如数组1与数组2对应,数组1与数组2对应,提取的数据在两个数组中的索引大小都相同,这是我需要的效果),
在这里,大家可能要问,为什么不直接提取到2维数组中呢,因为两个数组,所提取的数据类型等不相同,所以没能提取到2维数组中,也就自然出现了上面例子的一问。

例子中的两个数组都是即时从网站源码中提取的,也就是说数组1和数组2的大小不一定只是9,可能是几百或者几十,但是保存的两个数组大小一定是相等,就是说不会造成运行错误。
我想实现的效果是:从数组1中的数据列表来自动创建对应名字的文件夹,然后再从数组2自动创建位于数组1中创建的对应文件夹内,创建文件夹的目录就不用专门设置,就直接在当前脚本目录中,就是说11.txt创建在张三的这个文件夹内,22.txt创建在王五这个文件夹内,以此类推!(也就是说文件夹和文件都是由脚本来创建的)

上面例子中,我没有搞懂的是“”里面的for循环”,外层的for循环正常,里面的for循环要么一直循环完才跳出,要么就是只循环一次就跳出,
想做到里面的循环和外层循环保持一致,就是说外面循环一层,里面就循环一层,一直循环结束为止。
这样描述不知道各位大大们,能清楚了没有?感谢各位指教一下。

afan 发表于 2018-9-7 13:24:21

m765555 发表于 2018-9-7 13:17
非常感谢各位高手指教,其实我这里是我自己举的一个例子,主要是要用于工作中,内网网络,不能上网,可能是 ...

更懵逼……
第二层循环的意义何在?

顽固不化 发表于 2018-9-7 13:49:51

m765555 发表于 2018-9-7 13:17
非常感谢各位高手指教,其实我这里是我自己举的一个例子,主要是要用于工作中,内网网络,不能上网,可能是 ...

想做到里面的循环和外层循环保持一致,就是说外面循环一层,里面就循环一层,一直循环结束为止。

你想让i=1,j也等于1,i=2,j也等于2.。。。。。?逻辑上说不通。

志艺风云 发表于 2018-9-7 13:57:32

本帖最后由 志艺风云 于 2018-9-7 13:59 编辑

顽固不化 发表于 2018-9-7 09:22
如果就这么单一的对应,没必要嵌套
这个应该就是他的需求。
数组1与数组2对应,数组1与数组2对应,就是只需要FOR 一个数组

m765555 发表于 2018-9-7 14:12:02


难道只有二维数组能实现呀,呵呵。不知道5楼,顽固不化兄的思路能否实现,研究一下先.

就算二个循环没意义,如果真用2个一维数组来实现,那一层循环能解决吗?

水木子 发表于 2018-9-7 14:42:18

m765555 发表于 2018-9-7 14:12
难道只有二维数组能实现呀,呵呵。不知道5楼,顽固不化兄的思路能否实现,研究一下先.

就算二个循环没 ...

不是说非要二维数组才行,只是针对你这种情况,二维数组处理情况更方便。
两层循环有什么意义吗?
7# Sky老师给出的方法不行吗?

志艺风云 发表于 2018-9-7 15:57:12

本帖最后由 志艺风云 于 2018-9-7 16:37 编辑

你的需求就是这个,一维比二维更简单。
#include <Array.au3>
#include <MsgBoxConstants.au3>
#include <WinAPIFiles.au3>

Dim $shuzu1 = ["张三", "王五", "小牛", "麻子", "小明", "李白", "李四", "小红", "小蒋"]
Dim $shuzu2 = ["11.txt", "22.txt", "33.txt", "44.txt", "55.txt", "66.txt", "77.txt", "88.txt", "99.txt"]
_ArrayDisplay($shuzu1, "数组1")
_ArrayDisplay($shuzu2, "数组2")

For $i = 0 To UBound($shuzu1) - 1
      DirCreate( @ScriptDir & "\" & $shuzu1[$i])
      FileMove($shuzu2[$i], @ScriptDir & "\" & $shuzu1[$i])
Next



可能你实际上是想要这样?
#include <Array.au3>
Dim $shuzu1 = ["张三", "王五", "小牛", "麻子"]
Dim $shuzu2 = [["1.txt", "2.txt", "3.txt"], ["4.txt", "5.txt", "6.txt"], ["7.txt", "8.txt", "9.txt"], ["10.txt", "11.txt"]] ;每个目录下有多个文件
_ArrayDisplay($shuzu1, "数组1")
_ArrayDisplay($shuzu2, "数组2")

For $i = 0 To UBound($shuzu1) - 1
        DirCreate(@ScriptDir & "\测试\" & $shuzu1[$i])
        For $j = 0 To UBound($shuzu2, 2) - 1
                If $shuzu2[$i][$j] <> "" Then
                        FileMove(@ScriptDir & "\测试\" & $shuzu2[$i][$j], @ScriptDir & "\测试\" & $shuzu1[$i])
                EndIf
        Next
Next




页: [1] 2
查看完整版本: 请教两个一维数组双循环执行问题[已解决]