为什么从拆分文件生成的数组中提取字串不能做打开文件路径用?[已解决]
本帖最后由 蓝袍道士 于 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
$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
试了好多次,自己解决不了。还得请高人指点一下。 提供 “待拆分.txt” 文件看看 加引号看看到底返回了什么~
MsgBox(0, "搜索结果:", '"' & $wjlj & '"') 这和待拆分文件没关系吧,用其他变量没问题。消息框显示也没问题。关键是用到路径上就没用了。
MsgBox(0, "搜索结果:", '"' & $wjlj & '"')
"C:\Documents and Settings\Administrator\桌面\拆分文件\拆分结果\5.txt" 也就是加了二个引号。 请看看是这个原因吗?(因为没看到你的txt文件内容):
$file = FileOpen(@DesktopDir & '\1.txt', 0)
$filetext = FileRead($file)
FileClose($file)
$xy = StringSplit($filetext, ' ')
;~ For $i = 0 To $xy
;~ MsgBox(0, '', $xy[$i])
;~ Next
$file1 = FileOpen(@ScriptDir & '\结果.txt', 1+8)
For $i = 1 To $xy
FileWrite($file1, $xy[$i])
FileWrite($file1,@CRLF)
Next
FileClose($file1)我这里面的分隔符是 TAB 你也可以复制我这里的,或是改掉,文件1.txt 内容
C:\windows D:\Backup
要放桌面 $location = StringInStr($cf[$i], Chr(10), 0, 1) - 1 ; 搜索第一个换行符,也就是确定第一行
这一句应该改成
$location = StringInStr($cf[$i], Chr(14), 0, 1) - 1 ; 搜索第一个换行符,也就是确定第一行 建议考虑
FileReadLine 谢谢楼上各位的指点,试了试都不能解决问题。其实,取第一行作件名能过别的方式也能实现。只不过要先 要将分拆数组保存为文件,然后再读文件。对于人来说速度并无区别,我主要奇怪的是为什么分拆出数组的字串,能显示在消息框,也可保存在文件,而不能用在FileOpen($wjlj, 2)中。因为在以后的应用方面还会涉及这种问题,希望各位达人亲自运行一下上面的脚本,能找出问题所在。
原待拆分文件较长,现简化一下,但结果是一样的。内容如下
~~malanyu7zf
~~lishengyanbc0
;~ $result = FileReadLine($cf[$i],1); 用这个函数结果是空,数组值好像不能当文件读取行。 貌似应该是计算的问题,从2开始循环,第一行产生的文件名$wjlj=@ScriptDir & "\拆分结果\" & $i & ".txt"本身就是从2开始的,你算算最后拆出来的文件数量和行数对不对不就知道了 呵呵,楼上是没实际运行过该脚本,从2开始,实际才能得到第一行的内容。因数折分符在最前面,所以第一个文件是空的。没用。 本帖最后由 netegg 于 2010-10-16 09:26 编辑
回复 11# 蓝袍道士
我就是运行了之后才这么说的,我的意思就是说你那个文件名起错了,又没说别的,你用$wjlj=@ScriptDir & "\拆分结果\" & $i-1 & ".txt"试试 楼上的这位,不好意思。是我没说清楚,也就是没有强调一下。我那脚本中是列举了二种情况,要试我说的问题还得把
;~ $wjlj=@ScriptDir & "\拆分结果\" & $result & ".txt";用上面提取的字串变量就是不建立文件
这里注释符;~ 去掉。这样运行才能显示问题。
用$i或者$i-1代替,只为了映衬一下这个问题,不是实质问题。你这么有兴趣指点,在下十分感激。
你能不能再运行一下脚本,帮忙找找原因。 $location = StringInStr($cf[$i], Chr(10), 0, 1) - 1 ; 搜索第一个换行符,也就是确定第一行
这一句应 ...
xianhou 发表于 2010-10-15 19:55 http://www.autoitx.com/images/common/back.gif
呵呵,改为14没有用。但改为13却神奇的出现结果。还是应该感谢这位高手啊。
原因不太清楚,但问题也算解决啦 本帖最后由 afan 于 2010-10-16 12:44 编辑
这和待拆分文件没关系吧,用其他变量没问题。消息框显示也没问题。关键是用到路径上就没用了。
MsgBox(0,...
蓝袍道士 发表于 2010-10-15 16:49 http://www.autoitx.com/images/common/back.gif
路径明显多了个换行(就在你认为正确的$result尾部。让你加引号还没看出来?),那样还能创建文件吗?
而且你这方法没有排除文件名非法字符,不能创建的文件还会有不少。
页:
[1]
2