深夜冰天雪地裸体跪求VB里replace 的问题 急急 急
text1.text里有1
2
3
4
5
6
text2.text里是
1
5
6
怎么用replace实现把1和5和6从text1里删掉(目前用replace只能把连行的删掉,比如
2
3
4
而不能删
2
4
求解
----------------
我想应该要把text1里的一行一行读取出来放到text2里比对后删掉吧?
用什么代码实现,求解.
text1有2W行
text2有1K3多行
一行一行读取 怎么实现?
--------------------编程问答--------------------
--------------------编程问答-------------------- 大暑天,我以为到了南半球和两极了.
Private Sub Command1_Click()
Dim t2, t3, i&
t2 = Split(Text2, vbCrLf)
For i = 0 To UBound(t2)
Text1 = Replace(Text1, t2(i), "")
Next
Text1 = Replace(Text1, vbCrLf & vbCrLf, vbCrLf)
If Left(Text1, 2) = vbCrLf Then Text1 = Mid(Text1, 3)
If Right(Text1, 2) = vbCrLf Then Text1 = Left(Text1, Len(Text1) - 2)
End Sub
Private Sub Form_Load()
Text1 = 1 & vbCrLf & 2 & vbCrLf & 3 & vbCrLf & 4 & vbCrLf & 5 & vbCrLf & 6
Text2 = 1 & vbCrLf & 5 & vbCrLf & 6
End Sub
--------------------编程问答-------------------- 说的好感人啊,不过是不是水星人啊,我们地球都快热死了 --------------------编程问答-------------------- 还差一个空中720度转体后空翻....... --------------------编程问答-------------------- --------------------编程问答-------------------- 读取的我搞定了 能打开小于64K的
请问下 按2L的代码
1.txt里面是
1
2
3
4
一直到100
2.txt里面是
1
3
5
一直到99
用2L的代码实现的就不是
2
4
6
8
一直到100
请问怎么实现 --------------------编程问答-------------------- 还有 怎样能提高替换速度 因为有1K多行要替换 --------------------编程问答-------------------- 唉,你干嘛要在文本框里替换呢?
就算有1G的文本,你的屏幕有多大?能显示多少?
只显示需要显示的内容就行了!
用字符串变量来处理,然后替换,说不定会比用控件快十倍不止!
另外,读文件的代码,要是没搞对也是巨慢!
给你个快速读入变量的代码,变量数组每个成员就是一行:
dim sBuff as string,sLine() as string
dim I as long
open "xx.txt" for binary as #1
sbuff=space(lof(1))
get #1,,sbuff
close #1
sline()=split(sbuff,vbcrlf)
for i=0 to 20
debug.print sline(i) '只显示前20行
next
你要进行的替换啊判断啊,全针对sLine()这个字符串数组来进行,这样至少会比使用控件快很多倍. --------------------编程问答-------------------- 才1K多行,记得以前XMXOXO他们研究快速替换的时候,是一个五十多兆的文件,90多万行吧,要删除其中一个多次重复的词,极速能达到两秒多. --------------------编程问答-------------------- 其实是有1.txt和2.txt
想实现把2.txt与1.txt相同的从1里删掉
但2的内容在1里又不是连续的 比如1是 123456到100(1个数1行)
2是6523748(1个数1行)
怎么实现 --------------------编程问答-------------------- 快速读取我用的是
--------------------编程问答-------------------- 如果不把2个txt读取到TEXT里
Private Sub Command1_Click()
On Error GoTo err
CommonDialog1.Filter = "Îı¾Îļþ(*.txt)|*.txt"
CommonDialog1.CancelError = True
CommonDialog1.ShowOpen
Text1.Text = ""
Dim TextLine
Open CommonDialog1.FileName For Input As #1
Text1.Text = StrConv(InputB(LOF(1), 1), vbUnicode)
Close #1
Exit Sub
err:
MsgBox "δѡÖÐÎı¾", , "´íÎó"
End Sub
要怎么用字符串变量来实现呢? --------------------编程问答-------------------- 你先上你的两个文本的部分内容,然后大家才好帮你想办法
--------------------编程问答--------------------
你读到控件里显示是没啥问题
可是要处理的时候,那就慢得不是一点半点了! --------------------编程问答-------------------- 举个例子
1.txt的是
111111111 ++++ 111111111
111111112 ++++ 111111112
111111113 ++++ 111111113
111111114 ++++ 111111114
111111115 ++++ 111111115
111111116 ++++ 111111116
111111117 ++++ 111111117
111111118 ++++ 111111118
111111119 ++++ 111111119
111111120 ++++ 111111120
111111121 ++++ 111111121
…………………………………………
一共有1万行
2.txt是
111111112 ++++ 111111112
111111114 ++++ 111111114
111111116 ++++ 111111116
111111118 ++++ 111111118
111111120 ++++ 111111120
111111122 ++++ 111111122
有3千行
怎么实现把1.txt中与2.txt相同的内容从1.txt中删除
我是用replace 感觉很慢 而且不能把2.txt全部放到1里替换 --------------------编程问答-------------------- 用数据库方式吧 --------------------编程问答--------------------
大量文本的连接要用stringbuilder,别直接用&运算,另外,不要频繁地对编辑控件赋TEXT值,只在读取完后赋一次就行了. --------------------编程问答-------------------- 给点代码啦 --------------------编程问答-------------------- 2w多行文本文件,使用vb6无论如何都提不起速度来。速度方面必须使用c++之类的语言去提高。
至于替换,自然还是读取一段替换一段了。 --------------------编程问答-------------------- 用的是
Private Sub Command1_Click()
Dim t2, t3, i&
t2 = Split(Text2, vbCrLf)
For i = 0 To UBound(t2)
Text1 = Replace(Text1, t2(i), "")
Next
Text1 = Replace(Text1, vbCrLf & vbCrLf, vbCrLf)
If Left(Text1, 2) = vbCrLf Then Text1 = Mid(Text1, 3)
If Right(Text1, 2) = vbCrLf Then Text1 = Left(Text1, Len(Text1) - 2)
End Sub
我把从text2.text中找到的文本从text1.text中删除后生成在e:/001.txt
可生成的只有1K8多行,原来是1W行,删到1K多行应该还有8K多行啊。 --------------------编程问答-------------------- 设两个文本同在E盘根目录下:
--------------------编程问答-------------------- 文件1中的数据有重复的吗?如果有重复是保留一个还是都保留?
Sub GetNewTxt()
Dim Arr, k%
Dim Dic As Object, Str$
Set Dic = CreateObject("Scripting.Dictionary")
Open "E:\1.txt" For Input As #1
Arr = Split(StrConv(InputB(LOF(1), 1), vbUnicode), vbCrLf): Reset
For k = 0 To UBound(Arr)
Dic(Arr(k)) = ""
Next
Open "E:\2.txt" For Input As #1
Arr = Split(StrConv(InputB(LOF(1), 1), vbUnicode), vbCrLf): Reset
For k = 0 To UBound(Arr)
If Dic.exists(Arr(k)) Then Dic.Remove Arr(k)
Next
Arr = Dic.keys: Set Dic = Nothing
Str = Join(Arr, vbCrLf)
Open "E:\001.txt" For Output As #1
Print #1, Str: Reset
End Sub
比如:
1.txt:
9
9
7
3
6
3
2
9
2.txt:
2
3
你要结果是:
9
9
7
6
9
还是:
9
7
6
????
--------------------编程问答--------------------
呵,不完全同意.
看水平了. --------------------编程问答--------------------
水平差距远大于语言上的差距。 --------------------编程问答-------------------- Text控件是有行数限制的,呵呵.还是变量好些. --------------------编程问答-------------------- 用泛型,
Dictrory<string,int>
前面存字符,后面存值,
然后遍历替换,
补充:VB , 基础类