现在有若干个 容量超过 500M 的 文本文件 确定是500M以上 不用怀疑
需要统一替换每个文件刚开始的几行中的某个数据 比如
文件的头5行内容为
AAAAAAAAAAAA
BBBBBB
CCCCCCCCC
DDD
EEEEEEEE
.....
....
.......
现在需要把第4行的DDD 替换成 KKK 仅此而已.如何操作? 文件实在太大 常规手段打不开文件啊 .
我的机器 双 P4 2.8 CPU 1G内存
用Ultra Edit 或者 Notepad++ 全部是假死状态 跪求新颖的思路方法. 如何操作这么大的文件.
只要能把DDD 替换成 KKK 就可以了 万分感谢各位大虾.~~
需要统一替换每个文件刚开始的几行中的某个数据 比如
文件的头5行内容为
AAAAAAAAAAAA
BBBBBB
CCCCCCCCC
DDD
EEEEEEEE
.....
....
.......
现在需要把第4行的DDD 替换成 KKK 仅此而已.如何操作? 文件实在太大 常规手段打不开文件啊 .
我的机器 双 P4 2.8 CPU 1G内存
用Ultra Edit 或者 Notepad++ 全部是假死状态 跪求新颖的思路方法. 如何操作这么大的文件.
只要能把DDD 替换成 KKK 就可以了 万分感谢各位大虾.~~
不可以吗?
不可以吗?读出来没有问题,写回数据会有麻烦
不好意思 是我没说详细 举的例子不够好其中 DDD 要替换成 KKKKKKKKKKKKK这样要增加文件长度的 直接写字节 好象不行啊。 唉。。
能帮忙写个可行的办法吗?只要能达到效果 什么方法都可以
硬盘空间多的是 速度慢点也没关系
只要不会发生假死, BTW:文本文件是不是一行可以写无限个字符?还是固定一行只能写几个字符的?
用二进制打开 如何一行一行的读取文件内容?
可以确定是的:
文件里面含有回车符(看的见的 是一个黑块)、逗号和空格
读取文件内容的命令按什么符号来做为分割符以确定一次读多少个字符的啊?
能自定义的吗?
Dim fname As String
Dim s As String
Dim Head As Long
Dim i As Long
fname = "c:\test.txt"
Open fname For Input As #1
Do While Not EOF(1)
Line Input #1, s
If s <> "DDD" Then
i = Seek(1) '获得文件位置
Else
Exit Do
End If
Loop
Close #1
Head = FreeFile
Open fname For Binary Access Write As #1
Put Head, i, "KKK" '覆盖DDD
Close #1
End Sub
2.搜索和替换时使用二进制模式
3.使用缓冲区
老大,就一个200M文件也要几分钟啦,难道,楼主顶楼没有写:
现在有若干个 容量超过 500M 的
需要统一替换每个文件在我这里遇到的情况,还要加一句:
需要经常操作那样的话几分钟恐怕是不行的吧?大家是否可以找找,有没有对删除一小部分文件头操作特快的软件?如果没有的话,那恐怕是不能实现的喽:(
如果有的话,那大家是否可以思考一下,
为什么它可以这么快?难道也是读写全部文件吗?
缓冲区指的就是Byte数组,比如定义大小32768的缓冲区
Redim buffer(32767) As Byte
就可以了,数组下标从0开始省略中间的参数,分别用get、put语句读写整个缓冲区的内容到文件
如果文件修改的部分,改前与改后都正好是占满硬盘整簇字节,那也许可通过修改FAT表实现,不过这种巧合的机率几乎为0!
所以文件改写时改变了大小,一般只能通过复制重写方式。
当然,数据库等程序不会这样,要么为修改预留空间,要么通过只加入改写标记,然后将修改内容附加文件或写到文件尾部来实现,那当然会很快。这种方式可以参考,不过对那些读取这种文件的程序要有相关办法才行。
拆分文件就行了,以二进制打开那个500M的文件,读取前10K数据后,写入第二文件,在第二个文件中进行相应的替换,完了之后生成第三个文件,再读出500M的文件的第10K之后的数据()分批读出),分批写入第三个文件中,直到写完所有数据,删除掉500M的那个文件,删除第二个文件,最后将第三个文件更名为原来500M的文件名,一切OK!!!!!!!!!!
说的经典
确实这些500M的文件 只是2个软件互相传递数据的一个过程文件
替换那一小段数据 只是为了欺骗另一个软件
方便做工作。 所以 附加数据在文件尾 肯定不行 软件导入数据都是有固定格式的。