基本的に、その中のキーと値のペアの束をリストするコマンドの出力があります。出力は明確な形式ではないため、正規表現が最善のアプローチになると思います。
出力: http: //pastebin.com/Hfu4nP3M
基本的に、21〜30行目からキーと値のペア(カンマで区切って)を保存し、それらをマップに保存する必要があります。
正規表現を使用してこれを行うことは可能ですか?
ありがとう。
基本的に、その中のキーと値のペアの束をリストするコマンドの出力があります。出力は明確な形式ではないため、正規表現が最善のアプローチになると思います。
出力: http: //pastebin.com/Hfu4nP3M
基本的に、21〜30行目からキーと値のペア(カンマで区切って)を保存し、それらをマップに保存する必要があります。
正規表現を使用してこれを行うことは可能ですか?
ありがとう。
それがあなたが望むものであるかどうかはわかりませんが、21〜30行目からキー/値ペア(カンマ区切り)を格納する必要があるとあなたが言ったので、
{memory,
[{total,38751504},
{processes,13711212},
{processes_used,13711198},
{system,25040292},
{atom,662409},
{atom_used,653371},
{binary,287088},
{code,18209655},
{ets,1358504}]},
memory
に格納された後の値を読み取りたいと仮定しました[...]
。
これを行うには、次のようなものを使用できます
//creating reader to get data from file
BufferedReader in = new BufferedReader(new InputStreamReader(
new FileInputStream("data.txt")));// file with your data
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = in.readLine()) != null) {
sb.append(line.trim());// also remove unnecessary tabulators and
// spaces
}
in.close();
String data = sb.toString();
Pattern pattern = Pattern.compile("\\{memory,\\[(.*?)\\]");
Matcher m = pattern.matcher(data);
if (m.find()) {
Pattern keyValuePattern = Pattern.compile("\\{(\\w*?),(\\d*?)\\}");
Matcher matcher = keyValuePattern.matcher(m.group(1));
while (matcher.find())
System.out.println(matcher.group(1) + "->" + matcher.group(2));
} else
System.out.println("not found");
出力
total->38751504
processes->13711212
...
これには、ある程度のクリーンアップが必要になる場合があります。正規表現を頻繁に使用することはなく、Javaでは使用しません。
正規表現を使用してみてください:
[{,][^",}]*?[,}]
つまり、「{」または「、」に等しい文字を検索し、「}」または「、」に等しい文字が見つかるまで、「」、「}」、または「、」ではない無限文字を検索します。
まだ引用符でマークされていないものをすべて見つけるには、それを一致させます。
String s = p.match();
s = s.charAt(0) + '"' + s.substring(1, s.length() - 1) + '"' + s.charAt(s.length() - 1;
次に、それをログの適切な位置に戻します。それらをすべて完了したら、JSONを使用してログを読み取ることができます。
また、おそらくログインをメモリに入れておきたいので、操作が簡単になります。
String.equals()を使用して'{memory'が問題ないことがわかるまで、出力を1行ずつ読み取ることができます。次に、次のすべての行で実行できます
String[] result = line.replaceAll("[\\[\\]}{ \t]|},", "").split(",");
System.out.println(result[0] + "," + result[1]);
if(line.contains("]"))
break;