VB 关于读取文件字节的效率有关问题
VB 关于读取文件字节的效率问题
有代码如下
dim a() as byte :dim b() as byte
open "C:\a.txt" for binary as #1 /90K的文件 这里代码运行,大概的时间是 3 - 4 秒
open "C:\b.txt" for binary as #2 /60K 的文件
redim a (1 to filelen("C:\a.txt") )
redim b (1 to filelen("C:\b.txt") )
dim strA as string ,strB as string ,i as long
'/--- 这里开始如何加大读取的效率
for i = 1 to ubound(a)
strA = strA + format(a(i),"000" '避免 '4' & '40' = '440' '44' & '0' = '440' 的情况
next i
for i = 1 to ubound(b)
strB = strB + format(a(i),"000"
next i
' 在实际应用,文件大概有 1M - 3M之间,这个速度让我很头痛
'/--- 这里结束
最终的目的是为了 instr(strA,strB)
如何提高读取的效率
而且 a.txt 和 b.txt 又不知道可不可以用读取字符串的方法来读取,据我观察应该是不可以的
假设 a.txt 中的文字为
"..中国人" 他的16进制用UltraEdit 看为 12 13 AD FE FA D1 2A E4 (真正的情况 这八个字符不一定是 12 13 AD FE FA D1 2A E4 只是举例)
且 b.txt 中的文字为
".中国人" 对应的16进制为 18 AD FE FA D1 2A E4 ( 后面 AD FE FA D1 2A E4 是相同的 )
这里的"." 用字符串读出来看起来是相同的,但是代表这个"." 的16进制可能是 12 13 或者 18
------解决方案--------------------
有代码如下
dim a() as byte :dim b() as byte
open "C:\a.txt" for binary as #1 /90K的文件 这里代码运行,大概的时间是 3 - 4 秒
open "C:\b.txt" for binary as #2 /60K 的文件
redim a (1 to filelen("C:\a.txt") )
redim b (1 to filelen("C:\b.txt") )
dim strA as string ,strB as string ,i as long
'/--- 这里开始如何加大读取的效率
for i = 1 to ubound(a)
strA = strA + format(a(i),"000" '避免 '4' & '40' = '440' '44' & '0' = '440' 的情况
next i
for i = 1 to ubound(b)
strB = strB + format(a(i),"000"
next i
' 在实际应用,文件大概有 1M - 3M之间,这个速度让我很头痛
'/--- 这里结束
最终的目的是为了 instr(strA,strB)
如何提高读取的效率
而且 a.txt 和 b.txt 又不知道可不可以用读取字符串的方法来读取,据我观察应该是不可以的
假设 a.txt 中的文字为
"..中国人" 他的16进制用UltraEdit 看为 12 13 AD FE FA D1 2A E4 (真正的情况 这八个字符不一定是 12 13 AD FE FA D1 2A E4 只是举例)
且 b.txt 中的文字为
".中国人" 对应的16进制为 18 AD FE FA D1 2A E4 ( 后面 AD FE FA D1 2A E4 是相同的 )
这里的"." 用字符串读出来看起来是相同的,但是代表这个"." 的16进制可能是 12 13 或者 18
------解决方案--------------------
- VB code
dim Buff1() as byte,buff2() as byte,IsOK as boolean dim I as long,J as long Const lST as long=44 '比较的开始地址 dim FileName1 as string,FileName2 as string open filename1 for binary as #1 open filename2 for binart as #2 redim buff1(lof(1)-1) redim buff2(lof(2)-1) get #1,,buff1() get #2,,buff2() close for i= To ubound(buff1) if buff1(i)=buff2(lst) then isok=true for j=0 To ubound(buff2)-92 if buff1(i+j)<>buff2(lst+j) then isok=false exit for end if next If idok=true Then Msgbox "匹配开始地址为:" & i exit for end if endif next