主题:求助:关于文本分割时的回溯?
rigzdp
[专家分:0] 发布于 2008-07-22 00:58:00
我为工作方便,想写一个切分文本的小工具,现在碰到了难题:有时候要处理的文本太大太长,超过了65525行,这时候就需要把文本切分开来,分成2个或以上小于或等于65535行的文本,但文本中的内容是分开一段一段的,每段之间用特殊的字符串分开,例如“$$$$”。我希望切分文本的时候不要把一段文字分为两段,没个而是文件都是从某一段开始。假设原文本文件长66000行,如果不考虑从段首开始,那么只要简单的把文件分为两个,一个65535行,另一个465行就可以了,这个我会。但我希望的是,假设65535行是某段的第10行,也就是说第65526行是这一段的开始,这一行是段开始的标识字符串“$$$$”,我希望当程序发现第65535行不是某段的开始,程序不会从这里开始切分,而是回到65526行,从这里开始切分,这就是我说的回溯。但VB似乎对文本的读取,都是一行一行的,似乎没办法回溯,请各位高手帮忙指点一下,无论是提供源程序还是提供一个方案,我都不胜感激!谢谢!
回复列表 (共8个回复)
沙发
老大徒伤悲 [专家分:29120] 发布于 2008-07-22 13:02:00
向前找找看,好像是一江秋水,曾有专门论述文本分割的帖子。
板凳
rigzdp [专家分:0] 发布于 2008-07-22 17:52:00
找过了,“一江秋水”的帖子http://bbs.pfan.cn/post-279662.html,里面说的和我想实现的不一样,“一江秋水”的切割是不需要回溯的。
再请高手指教!谢谢!
3 楼
天天学习 [专家分:4570] 发布于 2008-07-22 20:01:00
[quote]程序发现第65535行不是某段的开始[/quote]在这个时候,照样把65535后面的内容读出来,再在它前面附加上65535之前的最后一个段开始的标识字符串“$$$$”之后的内容。也许就是你所谓的“回溯”?简而言之,就是把缺的那一段的“段头”给找出来再补上。
4 楼
rigzdp [专家分:0] 发布于 2008-07-23 00:51:00
对,但是怎么补出来,这个算法怎么样才能方便的实现?不用借助其他控件或数据库。
5 楼
guoyong_cy [专家分:3050] 发布于 2008-07-28 19:48:00
不要一行一行的读,估计你用的open for input
用binary吧,查找你的标志符位置
把习惯改一下,binary可以写任何文件,速度也是最快的
6 楼
bcahzvip [专家分:6040] 发布于 2008-07-28 22:50:00
请在常数或变量的后面加上 & 符号。 m(_ _)m
7 楼
singlion [专家分:690] 发布于 2008-07-31 00:28:00
用FSO不行吗
8 楼
家人 [专家分:6760] 发布于 2008-08-02 09:28:00
可以啊,不知道你是怎么定位的,用binary方式可以这样处理
dim hfile as long,k as long
dim tmp as string
hfile=freefile()
tmp=space(4)
open youfile for binary as hfile
k=lof(hfile)-3 '这里示例定位到最后,你根据你自己定位的位置修改
do
k=k-1
get #hfile,k,tmp
loop until tmp="$$$$"
'这样k就定位在了最后一个"$$$$"处,可以get到后面的内容,put到新文本文件中......
close
我来回复