2013-09-01 138 views
0

我有一个代理列表,就像IP:PORT,我需要做的是删除端口号为8080,80,431和13的所有代理。我尝试过使用StreamReader来做到这一点,但无济于事,任何帮助家伙?谢谢。删除文本框中的某些行

我的代码工作:

Using reader As New StreamReader(o.FileName()) 
     While Not reader.EndOfStream 
      Dim line As String = reader.ReadLine() 
      Dim X As String = line.Contains("8080") 
      For Each X In NsTextBox1.Text 
       NsTextBox1.Text = NsTextBox1.Text + X 
       Exit While 
      Next 
     End While 
    End Using 
+0

**我试着使用StreamReader来做到这一点**请分享你的努力! –

+0

使用读取器作为新的StreamReader(o.FileName()) 尽管不reader.EndOfStream 昏暗线作为字符串= reader.ReadLine() 昏暗X作为字符串= line.Contains( “8080”) 对于每个X在NsTextBox1 .Text NsTextBox1.Text = NsTextBox1.Text + X Exit While Next End While End Using – Frank

+0

请编辑您的问题并在其中粘贴代码。它会帮助他人也理解你的问题! –

回答

0

我最近写的东西,应该做的伎俩很好,如果代理列表每行包含1个IP不会在,是最后一个空白。
虽然不是最优化的代码,但它工作得很好,下面是解析约6000个代理列表的一些输出。

Output

你会使用它这样。

IO.File.WriteAllText("C:\ProxyOut.txt", ParseProxyList(IO.File.ReadAllText("C:\ProxyIn.txt"), 8080, 80, 431, 13)) 

编辑:哦,我刚才读它是一个文本框,使用不应该是不同的

TextBoxOut.Text = ParseProxyList(TextBoxIn.Text, 8080, 80, 431, 13)) 

和函数本身:

Private Function ParseProxyList(ByVal list As String, ParamArray ports() As Integer) 
    Dim splitList() As String = list.Split(vbCrLf) 
    Dim sb As System.Text.StringBuilder = New System.Text.StringBuilder() 
    Dim outputLinesCount As Integer = 0 
    For Each line As String In splitList 
     Dim bContainsPort As Boolean = False 
     For Each port As Integer In ports 
      If line.EndsWith(":" & port.ToString) Then 
       bContainsPort = True 
      End If 
     Next 
     If bContainsPort = False Then 
      sb.AppendLine(line) 
      outputLinesCount += 1 
     End If 
    Next 
    MsgBox(splitList.Count.ToString & "->" & outputLinesCount.ToString & " (" & (splitList.Count - outputLinesCount) & " Removed)") 
    Return sb.ToString 
End Function 
+0

完美,谢谢。 – Frank

+0

@ user2579399 ..您必须将此标记为答案! ..它帮助你不是吗?在downvote标志下面做一个绿色的勾号.. – matzone