Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将日志文件解析为CSV格式_Java_Parsing_Matlab_Csv_Logging - Fatal编程技术网

Java 将日志文件解析为CSV格式

Java 将日志文件解析为CSV格式,java,parsing,matlab,csv,logging,Java,Parsing,Matlab,Csv,Logging,我试图开发一个小代码,帮助我划分一个日志文件,该文件存储了大量到不同IP的跟踪路由,这些路由是在一周内发送的 我希望在每条跟踪路线的开始和结束处使用'--START---'和'--END---'标记来分割它们。示例如下: --- START --- Mon Mar 12 22:45:05 GMT 2012 traceroute to xxxxxxx (xxxxxxxx), 30 hops max, 60 byte packets 1 xxxxxxx (xxxxx) 1.085 ms 1.6

我试图开发一个小代码,帮助我划分一个日志文件,该文件存储了大量到不同IP的跟踪路由,这些路由是在一周内发送的

我希望在每条跟踪路线的开始和结束处使用'--START---'和'--END---'标记来分割它们。示例如下:

--- START ---
Mon Mar 12 22:45:05 GMT 2012
traceroute to xxxxxxx (xxxxxxxx), 30 hops max, 60 byte packets
1  xxxxxxx (xxxxx)  1.085 ms  1.662 ms  2.244 ms
2  xxxxxxxx (xxxxxxx)  0.792 ms  0.782 ms  0.772 ms
3  xxxxxxxxx (xxxxxxxxx)  8.545 ms  9.170 ms  9.644 ms
4  etc
5  etc
--- END ---
--- START ---
Mon Mar 12 22:45:05 GMT 2012
traceroute to xxxxxxxxx (xxxxxxxx), 30 hops max, 60 byte packets
1  139.222.0.1 (xxxxxxxxx)  0.925 ms  1.318 ms  1.954 ms
2  10.0.0.1 (xxxxxxxx)  0.345 ms  0.438 ms  0.496 ms
3  172.16.0.34 (xxxxxxxxx)  0.830 ms  2.553 ms  0.809 ms
4 etc
5 etc
6 etc
--- END ---
有谁能帮我一把,用matlab或java如何做到这一点。。。我还试图计算每条跟踪路线的跳跃量。在抛出--END--标记之前给定的数字

任何帮助都将不胜感激


干杯。

Quick'n肮脏的例子:

import java.io.*;
import java.text.*;
import java.util.*;
import java.util.regex.*;

public class Main
{
  private static class Record
  {
    public Date date;

    public String to;
    public int hops;
    public int packetSize;

    public String toString()
    {
      return date + " ::: " + to + ", " + hops + " hops, "
        + packetSize + " bytes";
    }
  }

  public static void main(String[] args) throws Exception
  {
    Scanner s = new Scanner(new FileReader(new File("input.txt")));

    Record currentRecord = null;
    ArrayList<Record> list = new ArrayList<Record>();

    while (s.hasNextLine()) {
      String line = s.nextLine();

      if ("--- START ---".equals(line)) {
        currentRecord = new Record();

      } else if ("--- END ---".equals(line)) {
        list.add(currentRecord);
        currentRecord = null;

      } else if (currentRecord.date == null) {
        currentRecord.date = new SimpleDateFormat(
          "EEE MMM dd HH:mm:ss zzz yyyy").parse(line);

      } else if (line.startsWith("traceroute to ")) {
        Pattern p = Pattern.compile(
          "traceroute to ([^ ]+) [^,]+, ([^ ]+) hops max, ([^ ]+) byte packets");
        Matcher m = p.matcher(line);

        if (m.matches()) {
          currentRecord.to = m.group(1);
          currentRecord.hops = Integer.parseInt(m.group(2));
          currentRecord.packetSize = Integer.parseInt(m.group(3));
        }
      }
    }

    for (int i = 0; i < list.size(); i++)
      System.out.println(list.get(i).toString());
  }

}

我向您指出了一系列不同的方向(
扫描仪
模式
简化格式
,等等)。对于单个“网关”项目,您还可以使用
String.split()
使用
(两个空格)作为分隔符。

只需查看每行的第一个字母。如果是大写:它是第一行,上面有日期。如果是小写(traceroute),则是第二行。如果是数字:这是一个“跳跃”行。谢谢你的帮助。我还试图显示每条跟踪路由的跳数,我发现这很困难,因为它没有说明最后一条跟踪路由。而是显示'--END---'行之前的最后一个跟踪。我如何告诉代码在最后一行之前找到最后一个跟踪?然后我就可以打印出啤酒花的数量了…@FredBones正如我在帖子中所说的,我向你介绍了一系列可以用来解析文本的类,为你指明了正确的方向。提示:如果阻塞并解析跃点,则添加另一个
else,包括数字(首先出现!);使用包含所有跃点的
ArrayList
更新
Record
。我希望你能自己写出逻辑。曼尼什,感谢你的帮助!我已经有一段时间没有使用java了,所以我觉得它有点难。我会接受你的建议,然后再告诉你进展如何!干杯Manish,我发现很难解释代码中发生了什么。我试图让它读取每条跟踪路线的每一行,但不确定如何读取。如果你能让我开始只是告诉我如何获得最终的跳数,这将是非常感谢。。。
Tue Mar 13 04:15:05 GMT+05:30 2012 ::: 203.98.69.105, 30 hops, 60 bytes
Tue Mar 13 04:15:05 GMT+05:30 2012 ::: 62.193.36.27, 30 hops, 60 bytes