主题:FileSystemObject的问题
singlion
[专家分:690] 发布于 2008-01-22 13:01:00
FSO有一个TextStream(下面简称ts)对象
ts有一个Read(n)方法用来读取n个字符,有一个Skip(n)用来跳过n个字符
我想把一个文本文件分割成若干部分,设置了两个ts:tsR和tsW
在写新文件之前,用file对象的size属性获得了原文件大小,并根据分割的标准计算得到了要分成多少个部分,然后for循环,每次tsR读取一定数目的字符交给tsW写入新建文件。
问题是,ts是不是有指针什么的记录上次读取到的位置,还是每次读取都必须要用skip跳过上次读过的字符数目?提前设定好了每次读取的字符数目,这个数目一般不能把文件大小整除,每次read(n)之前读取AtEndOfLine属性判断,能否避免出现“文件到末尾”的错误?
最后更新于:2008-01-22 13:04:00
回复列表 (共8个回复)
沙发
老大徒伤悲 [专家分:29120] 发布于 2008-01-22 17:33:00
1、ts是不是有指针什么的记录上次读取到的位置,还是每次读取都必须要用skip跳过上次读过的字符数目?
你试一下就知道了。
2、能否避免出现“文件到末尾”的错误?
使用错误收集语句处理,或者,循环变量的终值减1后,在循环外处理最后不足部分。
板凳
singlion [专家分:690] 发布于 2008-01-22 17:52:00
试了一下
我觉得用捕捉错误并不能完整的处理文本。就用终值减一的办法,但是还是出现错误
请问用fso的file对象读取的文件大小是字符数还是字节数?VB处理任何字符都是双字节,而在系统中有很大一部分字符是单字节的,这样,终值减一的办法也无法预测最后剩余多少字符。
如果文件大小是指字节数就只能回归老办法,readline了
3 楼
singlion [专家分:690] 发布于 2008-01-22 18:44:00
在运行中出错,debug了一下,得到数据
文件大小793535
被分成每个文件5000字符的话,将分成159个文件
但是才到第85个文件就超出文件结尾了,85约为159的一半
不应该啊,这个文本文件是一个小说,单字节字符很少(其中的标点符号也大多是全角),就算文件大小是字节数,也不应该到85就到结尾啊
4 楼
brokenworld [专家分:2640] 发布于 2008-01-22 19:02:00
在读的时候设置缓冲区,一般设为2 的n次幂。用filelen获取文件大小,lof(filenum)获取文件实际长度。二进制分割。
5 楼
singlion [专家分:690] 发布于 2008-01-22 19:13:00
算了,用readall
6 楼
老大徒伤悲 [专家分:29120] 发布于 2008-01-22 19:41:00
[quote]文件大小793535。将分成159个文件
但是才到第85个文件就超出文件结尾了,85约为159的一半[/quote]估计是中文和西文之间的关系出错了。
文件大小793535。单位应该是[size=3]字节[/size]。
被分成每个文件5000字符的话。单位是[size=3]汉字字符[/size],二个字节。
7 楼
singlion [专家分:690] 发布于 2008-01-22 20:19:00
用ReadAll解决了
8 楼
华山论剑 [专家分:5310] 发布于 2008-01-23 11:08:00
TextStream的Read方法读取的是字符数而非字节数,在NT/XP下(Unicode),就算是中英混合,也不用我们介入:
s = ts.Read(7)
s为:"FSO对象模型",如果算字节则应该是11。
没在Win9x下测试过,不知道SBCS系统下的情况。
我来回复