当前位置:编程学习 > VB >>

深夜冰天雪地裸体跪求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行)
怎么实现 --------------------编程问答-------------------- 快速读取我用的是

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
--------------------编程问答-------------------- 如果不把2个txt读取到TEXT里
要怎么用字符串变量来实现呢? --------------------编程问答-------------------- 你先上你的两个文本的部分内容,然后大家才好帮你想办法
--------------------编程问答--------------------
引用 11 楼 xiuhao 的回复:
快速读取我用的是

你读到控件里显示是没啥问题

可是要处理的时候,那就慢得不是一点半点了! --------------------编程问答-------------------- 举个例子
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里替换 --------------------编程问答-------------------- 用数据库方式吧 --------------------编程问答--------------------
引用 5 楼 xiuhao 的回复:
text1.text是从外部txt文件读取的
一般都有2W行 大概100多KB
我用


VB code
Private Sub Command2_Click()
On Error GoTo err
CommonDialog1.Filter = "文本文件(*.txt)|*.txt"
CommonDialog1.CancelError = True
CommonDialog1.……


大量文本的连接要用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盘根目录下:

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中的数据有重复的吗?如果有重复是保留一个还是都保留?
比如:
1.txt:
9
9
7
3
6
3
2
9

2.txt:
2
3

你要结果是:
9
9
7
6
9

还是:
9
7
6

????
--------------------编程问答--------------------
引用 19 楼 xuggzu 的回复:
2w多行文本文件,使用vb6无论如何都提不起速度来。速度方面必须使用c++之类的语言去提高。
至于替换,自然还是读取一段替换一段了。

呵,不完全同意.

看水平了. --------------------编程问答--------------------
引用 23 楼 myjian 的回复:
引用 19 楼 xuggzu 的回复:
2w多行文本文件,使用vb6无论如何都提不起速度来。速度方面必须使用c++之类的语言去提高。
至于替换,自然还是读取一段替换一段了。

呵,不完全同意.

看水平了.

水平差距远大于语言上的差距。 --------------------编程问答-------------------- Text控件是有行数限制的,呵呵.还是变量好些. --------------------编程问答-------------------- 用泛型,
Dictrory<string,int>
前面存字符,后面存值,
然后遍历替换,
补充:VB ,  基础类
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,