回 帖 发 新 帖 刷新版面

主题:求助:关于文本分割时的回溯?

我为工作方便,想写一个切分文本的小工具,现在碰到了难题:有时候要处理的文本太大太长,超过了65525行,这时候就需要把文本切分开来,分成2个或以上小于或等于65535行的文本,但文本中的内容是分开一段一段的,每段之间用特殊的字符串分开,例如“$$$$”。我希望切分文本的时候不要把一段文字分为两段,没个而是文件都是从某一段开始。假设原文本文件长66000行,如果不考虑从段首开始,那么只要简单的把文件分为两个,一个65535行,另一个465行就可以了,这个我会。但我希望的是,假设65535行是某段的第10行,也就是说第65526行是这一段的开始,这一行是段开始的标识字符串“$$$$”,我希望当程序发现第65535行不是某段的开始,程序不会从这里开始切分,而是回到65526行,从这里开始切分,这就是我说的回溯。但VB似乎对文本的读取,都是一行一行的,似乎没办法回溯,请各位高手帮忙指点一下,无论是提供源程序还是提供一个方案,我都不胜感激!谢谢!

回复列表 (共8个回复)

沙发

向前找找看,好像是一江秋水,曾有专门论述文本分割的帖子。

板凳

找过了,“一江秋水”的帖子http://bbs.pfan.cn/post-279662.html,里面说的和我想实现的不一样,“一江秋水”的切割是不需要回溯的。
再请高手指教!谢谢!

3 楼

[quote]程序发现第65535行不是某段的开始[/quote]在这个时候,照样把65535后面的内容读出来,再在它前面附加上65535之前的最后一个段开始的标识字符串“$$$$”之后的内容。也许就是你所谓的“回溯”?简而言之,就是把缺的那一段的“段头”给找出来再补上。

4 楼

对,但是怎么补出来,这个算法怎么样才能方便的实现?不用借助其他控件或数据库。

5 楼

不要一行一行的读,估计你用的open for input
用binary吧,查找你的标志符位置
把习惯改一下,binary可以写任何文件,速度也是最快的

6 楼

请在常数或变量的后面加上 & 符号。 m(_ _)m

7 楼

用FSO不行吗

8 楼

可以啊,不知道你是怎么定位的,用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

我来回复

您尚未登录,请登录后再回复。点此登录或注册