比如
1.txt
111111111
222222222
333333333 我要变成
111111111
AAAAAAAAA
222222222
333333333
1.txt
111111111
222222222
333333333 我要变成
111111111
AAAAAAAAA
222222222
333333333
解决方案 »
- 前些天有人说起的那个循环显示20-50的问题,确实有点意思,琢磨了两句代码
- 新手请教两个很基础的问题。谢谢
- 怎么把RS数据绑定Data Report 的文本框控件上?
- 如何得知一个窗体已被打开?
- 在vb中,找a表的b字段是否存在的循环语句怎么写?
- 还是有问题呀!!!!!(老莫的春天等人请进)
- 可以自动连数据源吗?
- 怎么把两个窗口合并为一个?
- 奇怪的 activex exe 问题,急。谁能帮我解决我把所有的分儿都给他(2180)
- 难题:那位大哥能帮我连上 202.102.170.242 的 25 好 端口阿 。 我想编游戏的外挂程序。我要程序。谢谢啦
- access下的两列作为数字相加的sql语句怎么写?
- 关于activex控件动态调用方法???急急急....
比如
1.txt
11111
22222
33333
44444
...
//*******
9999
0000我需要变成
11111
22222
33333
44444
...
//*******
AAAA
BBBB
CCCC
9999
0000
只要你不拿一个非常巨大的文件来、偏偏又要插到开头的位置去,这个过程应该
是没什么问题的(这时主要是看能不能把这个文件全部保存到String数组里去,就看
你的内存够不够了)。并且总体效率来说,也算是很高的了:只把文件读了一遍,然
后直接从插入点写到文件尾。
只要 lLocat 的值不是非常大,这个过程就用不了多少内存。
另外多说一句:文本文件必须是 0x0D 0x0A (就是“回车+换行”分界的),
如果是仅以“换行”作为行分界符,这个过程就需要改一下才行,并且对“巨大”的
文件不适合处理了。这是 VB 本身的原因,它是读到“回车+换行”才认为行结束。
我曾经遇到过,一个超过600K的Java源程序,它执行一句“Line Input”,就把整个
文件读完了!(结果是:处理后的文档和处理前一样,当时我还没回过神来,跟踪执
行过程后才发现原因所在)Sub InstTxt(strFile$, strTxtOut$, lLocat&)
'strFile 要进行插入操作的文件名
'strTxtOut 插入内容
'lLocat 插到倒数第几行 Dim sTxtSave$(), lPntStack&(), ltmpA&, ltmpB&
Dim MASKNUM&, lCurPnt&, lFNum&, lLineCnt& If (lLocat < 0) Then Error (17)
lFNum = FreeFile()
Open strFile For Binary As #lFNum
lCurPnt = LOF(lFNum)
If ((lLocat = 0) Or (lCurPnt = 0)) Then
Put #lFNum, lCurPnt + 1, strTxtOut & vbCrLf
Close #lFNum: Exit Sub
End If
ltmpA = -1: ltmpB = lLocat
While (ltmpB > 0)
ltmpA = ltmpA And (ltmpA - 1)
ltmpB = ltmpB And ltmpA
Wend
MASKNUM = ltmpA Xor -1&
ReDim sTxtSave(0 To MASKNUM), lPntStack(0 To MASKNUM)
ltmpA = lCurPnt: ltmpB = 1
lCurPnt = 0: lLincnt = 0: Seek #lFNum, 1
Do
lPntStack(lCurPnt) = ltmpB
Line Input #lFNum, sTxtSave(lCurPnt)
ltmpB = Seek(lFNum)
lLineCnt = lLineCnt + 1
lCurPnt = lLineCnt And MASKNUM
Loop While (ltmpB < ltmpA)
If (lLocat >= lLineCnt) Then
Seek #lFNum, 1
For ltmpA = 0 To lCurPnt - 1
Put #lFNum, , sTxtSave(ltmpA) & vbCrLf
Next
Close #lFNum: Exit Sub
End If
ltmpA = (MASKNUM + 1 + lCurPnt - lLocat) And MASKNUM
Seek #lFNum, lPntStack(ltmpA)
Put #lFNum, , strTxtOut & vbCrLf
While (ltmpA <> lCurPnt)
Put #lFNum, , sTxtSave(ltmpA) & vbCrLf
ltmpA = (ltmpA + 1) And MASKNUM
Wend
Close #lFNumEnd Sub 是倒数第几行,你自己搞定。
你发贴提问时是插入一行,现在又变成插多行了。
不过插多行可以象这样来调用:
Dim strTemp$
strTemp = "AAAA" & vbCrLf & "BBBB" & vbCrLf & "CCCCC"
Call InstTxt(strFileName, strTemp, nnnnn) 'nnnnn是你具体的倒数第几行