找回密码  加入

AUTOIT CN

搜索
查看: 205|回复: 18

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

[复制链接]
发表于 2018-9-7 00:57:02 | 显示全部楼层 |阅读模式
本帖最后由 m765555 于 2018-9-7 20:26 编辑

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

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

  8. Local $n=0
  9. For $i= 0 To UBound($shuzu1) -1
  10.         
  11.                 For $j=0 To UBound($shuzu2) -1
  12.                         DirCreate($shuzu1[$i])
  13.                     FileMove($shuzu2[$j] & ,@ScriptDir & $shuzu1[$i] & "")

  14.                 $n+=1
  15.                    If $n = UBound($shuzu1) Then
  16.                         ExitLoop
  17.                    EndIf
  18.                
  19.             Next

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

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

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

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

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




发表于 2018-9-7 02:13:42 | 显示全部楼层
如果你的TXT文件都是存在的,用不着嵌套循环吧? 还有就是TXT和创建的文件夹是否在同一目录内?
发表于 2018-9-7 08:39:32 | 显示全部楼层
我觉得你这个没必要用两个数组吧!用一个二维数组可能更方便。
还有,为什么要这样循环两遍呢?没大明白你要做干什么。
发表于 2018-9-7 08:48:13 | 显示全部楼层
水木子 发表于 2018-9-7 08:39
我觉得你这个没必要用两个数组吧!用一个二维数组可能更方便。
还有,为什么要这样循环两遍呢?没大明白你 ...

因为他已经把自己给绕晕了...学好数组,那autoit也入门一半了
发表于 2018-9-7 09:22:54 | 显示全部楼层
本帖最后由 顽固不化 于 2018-9-7 09:53 编辑

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

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

我是过来人  按照他的需求他自己最好理解
发表于 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][0])
                FileMove(@ScriptDir & '\' & $aArray[$i][1], @ScriptDir & '\' & $aArray[$i][0], 1)
        Next
        
        
        
EndFunc   ;==>_Main


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

同样的观点~
不知道LZ两个数组的创建方式,如果是手动创建,也需要一一对应的关系,用二维数组是最直观且不易出错的。
如:
Local $a2D[3][2] = [ _
        ["张三", "11.txt"], _
        ["王五", "22.txt"], _
        ["小牛", "33.txt"]]
 楼主| 发表于 2018-9-7 13:17:55 | 显示全部楼层
非常感谢各位高手指教,其实我这里是我自己举的一个例子,主要是要用于工作中,内网网络,不能上网,可能是我描述得不太清楚
是这样的,通过正则从网站源码中分别提取两组数据分别保存到数组1和数组2中,
数组1的数据类似于上面例子中的文件夹,数组2的数据是单独的文件列表(如上面例子中的单个文件清单),观察发现数组1和数组2的相对应的索引正好是对应,是我所需要的(如数组1[0]与数组2[0]对应,数组1[1]与数组2[1]对应,提取的数据在两个数组中的索引大小都相同,这是我需要的效果),
在这里,大家可能要问,为什么不直接提取到2维数组中呢,因为两个数组,所提取的数据类型等不相同,所以没能提取到2维数组中,也就自然出现了上面例子的一问。

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

上面例子中,我没有搞懂的是“”里面的for循环”,外层的for循环正常,里面的for循环要么一直循环完才跳出,要么就是只循环一次就跳出,
想做到里面的循环和外层循环保持一致,就是说外面循环一层,里面就循环一层,一直循环结束为止。
这样描述不知道各位大大们,能清楚了没有?感谢各位指教一下。
发表于 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[0]与数组2[0]对应,数组1[1]与数组2[1]对应,就是只需要FOR 一个数组
 楼主| 发表于 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[9] = ["张三", "王五", "小牛", "麻子", "小明", "李白", "李四", "小红", "小蒋"]
Dim $shuzu2[9] = ["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[4] = ["张三", "王五", "小牛", "麻子"]
Dim $shuzu2[4][3] = [["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



您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2018-9-20 01:37 , Processed in 0.094937 second(s), 15 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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