2013-02-25 4 views
0

У меня есть цикл, который извлекает строку из textbox по строкам и несколько условий для каждой итерации. если условие истинно, я хочу удалить строку из textbox, есть ли способ удалить всю строку из строки? Вот мой код ..Как удалить строку строки из текстового поля vb.net

Dim fileContents As String 
    fileContents = txtOCR.Text 
    Dim strSet(1000) As String 
    Dim a As Integer = 1 
    Dim words As String 

    MsgBox(fileContents) 

    For i = 1 To fileContents.Length 
     Dim xx As String = Mid(fileContents, i, 1) 

     'parse text line by line 
     If xx = Chr(10) Then 
      If Mid(fileContents, i - 1, 1) = Chr(13) Then 
       strSet(i) = Mid(fileContents, a, (i - a) - 1) 

    'count words 
       Dim intCount As Integer 
       intCount = 1 
       For b = 1 To Len(strSet(i)) 
        If Mid(strSet(i), b, 1) = " " Then 
         intCount = intCount + 1 
        End If 
       Next 

     If txtTitle.Text = "" And intCount = 1 Then 
       txtTitle.Text = " " & strSet(i) 

    ElseIf intCount = 1 Then 
        If strSet(i).Contains("BY") = True Then 
         GoTo lastline 

        ElseIf strSet(i).Contains("by") = True Then 
         GoTo lastline 

        ElseIf strSet(i).Contains("By") = True Then 
         GoTo lastline 


        Else 
         txtTitle.Text = txtTitle.Text + " " & strSet(i) 

        End If 

      End If 

      a = i 

     End If 
    Next 

Также возможно скопировать следующую строку строки, когда найдено ключевое слово «BY»? Мне нужна помощь, это для моего проекта диссертации.

ответ

0

Вы используете много старых функций VB6, которые, в то время как все еще поддерживается в VB.NET для обратной совместимости, которые на самом деле не рекомендуется для новых разработок. Лучше использовать функции платформы .NET, которые упрощают эту задачу. Например:

  • Используйте List(Of String) или StringBuilder вместо Dim strSet(1000) As String
  • Использование MessageBox.Show вместо MsgBox
  • Использование String.SubString вместо Mid
  • Использование String.Length вместо Len
  • Использование ContrlChars или Environment.NewLine вместо Chr(10) и Chr(13)
  • И прежде всего, пожалуйста, не используйте GoTo

Однако наиболее важным инструментом вы упускаете является String.Split метод, который разбивает строку на массив строк на одном или нескольких разделителей. В этом случае вы можете разбить строку на строку новой строки.Например:

Dim builder As New StringBuilder() 
For Each line As String In fileContents.Split(New String() {Environment.NewLine}, StringSplitOptions.None) 
    If Not line.ToLower().Contains("by") Then 
     builder.AppendLine(line) 
    End If 
Next 
txtOCR.Text = builder.ToString() 

Или, вы можете использовать StringReader класс, который, в зависимости от ваших предпочтений и стиля, может быть еще проще следовать:

Dim builder As New StringBuilder() 
Dim reader As New StringReader(txtOCR.Text) 
While True 
    Dim line As String = reader.ReadLine() 
    If line Is Nothing Then Exit While 
    If Not line.ToLower().Contains("by") Then 
     builder.AppendLine(line) 
    End If 
End While 
txtOCR.Text = builder.ToString() 

Или, если вы хотите, чтобы доказать, как ты умный, вы можете использовать метод расширения LINQ, чтобы сделать все это в одной строке:

txtOCR.Text = String.Join(Environment.NewLine, fileContents.Split(New String() {Environment.NewLine}, StringSplitOptions.None).Where(Function(x) Not x.ToLower().Contains("by"))) 

Но, иногда код легче читать, если логика прописана, а не всех с протаранил вместе так :)

Update

Вот один способ, которым Вы могли бы получить все «по» линии с линией, которая следует сразу за ними:

Dim builder As New StringBuilder() 
Dim reader As New StringReader(txtOCR.Text) 
While True 
    Dim line As String = reader.ReadLine() 
    If line Is Nothing Then Exit While 
    If line.ToLower().Contains("by") Then 
     builder.AppendLine(line) 
     builder.AppendLine(reader.ReadLine()) 
    End If 
End While 
txtOCR.Text = builder.ToString() 
+0

Я попробую все ваши предложения estion thank you :) – user2107624

+0

Я запустил ваш код, но моя проблема в том, что цикл находит ключевое слово «by». Я хочу скопировать следующую строку в текстовое поле. – user2107624

+0

Вы говорите, что единственными строками, которые вы хотите сохранить, являются те, которые следуйте строке, содержащей строку «by»? –

0

Я собираюсь не вдаваться в подробности, но, обнаружив «\ n», я думаю, вы должны быть в состоянии выполнить эту работу. Попробовали?

+0

я пытался, но все еще может» t скопировать новую строку – user2107624

1

Попробуйте это, t является TextBox:

Dim linesResult As New List(Of String)() 
    Dim iNumWords As Integer 
    Dim bFound As Boolean 

    For iLine As Integer = 0 To t.Lines.Length - 1 
     Dim words() As String = t.Lines(iLine).Split(" "c) 

     If bFound Then TextBox2.Text &= t.Lines(iLine) & Environment.NewLine() 

     iNumWords += words.Length 
     bFound = False 

     For Each elem As String In words 
      If elem.Equals("by", StringComparison.CurrentCultureIgnoreCase) Then 
       bFound = True 
       Exit For 
      End If 
     Next 

     If Not bFound Then linesResult.Add(t.Lines(iLine)) 
    Next 
    t.Lines = linesResult.ToArray() 
+0

Я попробую это, спасибо :) – user2107624

+0

Я запустил ваш код, но моя проблема в том, когда цикл находит ключевое слово «by», я хочу скопировать следующую строку в текстовое поле – user2107624

+0

@ user2107624 отредактировано для добавления ваш новый запрос – SysDragon

Смежные вопросы