Как читать строки выше и ниже определенного белья в java? - PullRequest
0 голосов
/ 27 января 2012

Мне нужно проанализировать файл журнала в формате txt.

Мне нужно сопоставить строку и прочитать строки выше и ниже соответствующей строки.

Мне нужно сделать что-то похожее на grep -A 30 -B 50 'hello'.

Если у вас есть другие предложения, пожалуйста.

Ответы [ 3 ]

1 голос
/ 27 января 2012

псевдокод:

initialize a Queue
for each line
    if line matches regex
        read/show lines from queue;
        read/show next lines;
    else {
        if queue size > 30
             queue.remove() // removes head of the queue
        add this line to queue;
    }

Вы можете использовать BufferedReader для чтения файла построчно, Pattern для проверки строки в регулярном выражении и Очередь для хранения предыдущих строк.

1 голос
/ 27 января 2012

Читайте файл построчно и сопоставляйте вашу строку (либо regexp, либо String.indexOf ("")). Сохраняйте предыдущие n строк в памяти, чтобы при совпадении со строкой их можно было распечатать. Используйте BuffereReader.readLine () для чтения файла построчно (обратите внимание, что использование BufferedReader на самом деле более сложно, потому что вы не можете вернуться назад). Или для большей гибкости RandomAccessFile . С помощью этого метода вы можете отметить свою позицию, распечатать следующие m строк и затем вернуться назад, чтобы продолжить поиск с того места, где вы его оставили.

0 голосов
/ 27 января 2012

Вы можете использовать следующий код (использует java 5 api java.util.Scanner):

    Scanner scanner = new Scanner(new File("YourFilePath"));
    String prev = null;
    String current;
    while (scanner.hasNextLine())
    {
        current = scanner.nextLine();
        if (current.contains("YourRegEx"))
            break;
        else
            prev = current;
    }
    String next = scanner.nextLine();

Возможно, вы захотите добавить дополнительные проверки для prev, не равного нулю, и для вызова scanner.hasNextLine() до String next = scanner.nextLine()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...