找回密码
 加入
搜索
查看: 8287|回复: 18

[AU3基础] 为什么从拆分文件生成的数组中提取字串不能做打开文件路径用?[已解决]

 火.. [复制链接]
发表于 2010-10-15 15:19:01 | 显示全部楼层 |阅读模式
本帖最后由 蓝袍道士 于 2010-10-16 10:58 编辑

;~ 拆分文件
#include<File.au3>
#include<array.au3>
$dcf0 = FileOpen(@ScriptDir & "\待拆分.txt", 0)
$dcf = FileRead($dcf0)
$cf = StringSplit($dcf, "~~", 1)

For $i = 2 To $cf[0]
        $location = StringInStr($cf[$i], Chr(10), 0, 1) - 1 ; 搜索第一个换行符,也就是确定第一行
;~ MsgBox(0, "搜索结果:", $location)
        $result = StringLeft($cf[$i], $location)
;~         MsgBox(0, "搜索结果:", $result);显示变量没问题
;~ $wjlj=@ScriptDir & "\拆分结果\" & $result & ".txt";用上面提取的字串变量就是不建立文件
$wjlj=@ScriptDir & "\拆分结果\" & $i & ".txt";换个变量就没问题,这是什么原因?这样不能做到用文件中第一行做文件名这种想法。
        $cfjg = FileOpen($wjlj, 2)
        FileWrite($cfjg, $cf[$i])
        MsgBox(0, "搜索结果:", $wjlj, 1);文件路径显示成功,但不能建立文件
Next

试了好多次,自己解决不了。还得请高人指点一下。

评分

参与人数 1金钱 +10 收起 理由
afan + 10 感谢主动将修改帖子分类为[已解决],请继续 ...

查看全部评分

发表于 2010-10-15 15:45:22 | 显示全部楼层
提供 “待拆分.txt” 文件看看
发表于 2010-10-15 16:20:52 | 显示全部楼层
加引号看看到底返回了什么~
MsgBox(0, "搜索结果:", '"' & $wjlj & '"')
 楼主| 发表于 2010-10-15 16:49:58 | 显示全部楼层
这和待拆分文件没关系吧,用其他变量没问题。消息框显示也没问题。关键是用到路径上就没用了。
MsgBox(0, "搜索结果:", '"' & $wjlj & '"')
"C:\Documents and Settings\Administrator\桌面\拆分文件\拆分结果\5.txt" 也就是加了二个引号。
发表于 2010-10-15 17:20:43 | 显示全部楼层
请看看是这个原因吗?(因为没看到你的txt文件内容):

本帖子中包含更多资源

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

×

评分

参与人数 1金钱 +20 收起 理由
afan + 20

查看全部评分

发表于 2010-10-15 17:25:03 | 显示全部楼层
$file = FileOpen(@DesktopDir & '\1.txt', 0)
$filetext = FileRead($file)
FileClose($file)
$xy = StringSplit($filetext, '        ')
;~ For $i = 0 To $xy[0]
;~         MsgBox(0, '', $xy[$i])
;~ Next
$file1 = FileOpen(@ScriptDir & '\结果.txt', 1+8)
For $i = 1 To $xy[0]
        FileWrite($file1, $xy[$i])
        FileWrite($file1,@CRLF)
Next
FileClose($file1)
我这里面的分隔符是 TAB 你也可以复制我这里的,或是改掉,文件1.txt 内容


C:\windows        D:\Backup

要放桌面

评分

参与人数 1金钱 +15 收起 理由
afan + 15

查看全部评分

发表于 2010-10-15 19:55:01 | 显示全部楼层
$location = StringInStr($cf[$i], Chr(10), 0, 1) - 1 ; 搜索第一个换行符,也就是确定第一行

这一句应该改成

$location = StringInStr($cf[$i], Chr(14), 0, 1) - 1 ; 搜索第一个换行符,也就是确定第一行
发表于 2010-10-15 19:55:53 | 显示全部楼层
建议考虑

FileReadLine
 楼主| 发表于 2010-10-16 08:40:38 | 显示全部楼层
谢谢楼上各位的指点,试了试都不能解决问题。其实,取第一行作件名能过别的方式也能实现。只不过要先 要将分拆数组保存为文件,然后再读文件。对于人来说速度并无区别,我主要奇怪的是为什么分拆出数组的字串,能显示在消息框,也可保存在文件,而不能用在FileOpen($wjlj, 2)中。因为在以后的应用方面还会涉及这种问题,希望各位达人亲自运行一下上面的脚本,能找出问题所在。
原待拆分文件较长,现简化一下,但结果是一样的。内容如下
~~malanyu7zf
~~lishengyanbc0

;~ $result = FileReadLine($cf[$i],1);   用这个函数结果是空,数组值好像不能当文件读取行。
发表于 2010-10-16 08:54:24 | 显示全部楼层
貌似应该是计算的问题,从2开始循环,第一行产生的文件名$wjlj=@ScriptDir & "\拆分结果\" & $i & ".txt"本身就是从2开始的,你算算最后拆出来的文件数量和行数对不对不就知道了
 楼主| 发表于 2010-10-16 09:17:55 | 显示全部楼层
呵呵,楼上是没实际运行过该脚本,从2开始,实际才能得到第一行的内容。因数折分符在最前面,所以第一个文件是空的。没用。
发表于 2010-10-16 09:23:47 | 显示全部楼层
本帖最后由 netegg 于 2010-10-16 09:26 编辑

回复 11# 蓝袍道士
我就是运行了之后才这么说的,我的意思就是说你那个文件名起错了,又没说别的,你用$wjlj=@ScriptDir & "\拆分结果\" & $i-1 & ".txt"试试
 楼主| 发表于 2010-10-16 09:48:57 | 显示全部楼层
楼上的这位,不好意思。是我没说清楚,也就是没有强调一下。我那脚本中是列举了二种情况,要试我说的问题还得把
;~ $wjlj=@ScriptDir & "\拆分结果\" & $result & ".txt";用上面提取的字串变量就是不建立文件
这里注释符;~ 去掉。这样运行才能显示问题。

用$i或者$i-1代替,只为了映衬一下这个问题,不是实质问题。你这么有兴趣指点,在下十分感激。
你能不能再运行一下脚本,帮忙找找原因。
 楼主| 发表于 2010-10-16 10:37:31 | 显示全部楼层
$location = StringInStr($cf[$i], Chr(10), 0, 1) - 1 ; 搜索第一个换行符,也就是确定第一行

这一句应 ...
xianhou 发表于 2010-10-15 19:55

呵呵,改为14没有用。但改为13却神奇的出现结果。还是应该感谢这位高手啊。
原因不太清楚,但问题也算解决啦
发表于 2010-10-16 12:36:11 | 显示全部楼层
本帖最后由 afan 于 2010-10-16 12:44 编辑
这和待拆分文件没关系吧,用其他变量没问题。消息框显示也没问题。关键是用到路径上就没用了。
MsgBox(0,  ...
蓝袍道士 发表于 2010-10-15 16:49



    路径明显多了个换行(就在你认为正确的$result尾部。让你加引号还没看出来?),那样还能创建文件吗?
而且你这方法没有排除文件名非法字符,不能创建的文件还会有不少。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-4-29 18:14 , Processed in 0.090191 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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