txt
形式のログファイルを解析する必要があります。javaの特定の行番号の上と下の行を読み込む方法は?
文字列と一致し、一致したStringの上と下の行を読み取る必要があります。
私はgrep -A 30 -B 50 'hello'
のような何かをする必要があります。
他にも提案がある場合は、歓迎します。
txt
形式のログファイルを解析する必要があります。javaの特定の行番号の上と下の行を読み込む方法は?
文字列と一致し、一致したStringの上と下の行を読み取る必要があります。
私はgrep -A 30 -B 50 'hello'
のような何かをする必要があります。
他にも提案がある場合は、歓迎します。
あなたは、次のコード(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();
をあなたが必要とするString next = scanner.nextLine()
ファイルを1行ずつ読み込み、文字列(regexpまたはString.indexOf( "")のいずれか)に一致させます。前のn行をメモリに保存しておけば、文字列にマッチしたときにそれらを印刷することができます。ファイルを1行ずつ読み込むには、BuffereReader.readLine()を使用してください(実際には、BufferedReaderを使用すると、ジャンプバックできないため、実際にはさらに複雑になります)。 または柔軟性を高めるためにRandomAccessFile。この方法では、あなたの位置をマークし、次のm行を印刷して戻って、どこを離れた場所から検索を続けることができます。
擬似コード:
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;
}
あなたが前の行を保存するために、正規表現に対してラインをチェックするためのライン、Patternでファイルの行を読み取るためにBufferedReaderを使用して、Queueことができます。
前
prev
がnullとscanner.hasNextLine()
を呼び出していないことのために追加のチェックを追加することもできます検索文字列が出現するたびに前の30行と次の50行を印刷します。あなたの擬似コードは実際にはそうではありません... –編集の前に、質問は30行 - 「行の上と下」を言及しませんでした。今すぐコードを編集する。 – Marcelo
はい、私はそれを "grep -A 30 -B 50 'hello'"から控除しました:D –