Обрезать файл после пустой строки - PullRequest
0 голосов
/ 05 января 2012

У меня есть текстовый файл с несколькими пустыми строками, и я пытаюсь вернуть все строки между двумя из них специально

так что если у меня есть файл, который выглядит так:

 ____________________________
 1########################
 2##########################
 3
 4########################
 5##########################
 6#######################
 7
 8#########################
 9##########################
 10#######################
 11####################
 12########################
 13#########################
 14
 15##########################
 ----------------------------

Я бы хотел взять строки 8-13. К сожалению, это может быть не всегда 8-13, а 9-20 или 7-8, но, тем не менее, оно всегда будет между 2-й и 3-й строкой.

Я знаю, как обрезать символы и выделять отдельные линии, но я не знаю, как обрезать целые разделы.

Буду признателен за любую помощь, даже если вы просто укажете мне учебник.

Спасибо заранее.

Ответы [ 2 ]

2 голосов
/ 05 января 2012

Основная идея здесь состоит в том, чтобы получить всю вещь в виде строки, разбить ее на группы с двойным разрывом строки, а затем сослаться на нужную группу (в вашем случае - на третью).

Dim value As String = File.ReadAllText("C:\test.txt")

Dim breakString As String = Environment.NewLine & Environment.NewLine

Dim groups As String() = value.Split({breakString}, StringSplitOptions.None)

Dim desiredString As String = groups(2)

MsgBox(desiredString)

Edit: В ответ на вопрос в вашем комментарии -

Environment.NewLine - более динамичный способ указания переноса строки. Предполагая, что вы работаете в Windows - вы также можете использовать VbCrLf. Идея состоит в том, что если вы скомпилируете тот же код в Linux, то Environment.NewLine вместо этого сгенерирует Lf. Вы можете увидеть здесь для получения дополнительной информации: http://en.wikipedia.org/wiki/Newline

Причина, по которой я использовал Environment.NewLine & Environment.NewLine, заключается в том, что вы хотите разбить вашу информацию там, где есть два переноса строк (один в конце последней строки абзаца и один для пустой строки перед следующим абзацем)

0 голосов
/ 10 апреля 2012

В итоге я урезал последнюю часть и искал то, что мне нужно в первой части (я знаю, что не включил в вопрос поисковую часть, но я просто пытался найти способ сузить результаты поиска, как это было бы иметь повторные результаты). Я публикую это, если кто-нибудь еще наткнется на это в поисках ответов.

Dim applist() = System.IO.File.ReadAllLines("C:\applist.txt")
Dim findICSName As String = "pid"
Dim ICSName As New Regex("\:.*?\(")
Dim x = 0
    Do Until applist(x).Contains("Total PSS by OOM adjustment:")
        If applist(x).Contains(findICSName) Then
            app = ICSName.Match(applist(x)).Value
            app = app.TrimStart(CChar(": "))
            app = app.TrimEnd(CChar("("))
            ListBox1.Items.Add(app)
        End If
        x = x + 1
    Loop
End If

Как это работает, он просматривает каждую строку для регулярного выражения до тех пор, пока не достигнет первого слова в точке останова "Total PSS by OOM Adjustment":

...