2012-07-22 2 views
-2

로그를 나타내는 텍스트 파일을 구문 분석하려고합니다. 나는 그것이 일어날지도 모르는 모든 에로스를 다룰만큼 충분히 강력 해지기를 바란다. 비록 내가 모범 사례와 내가 설명해야 할 실수에 대해 우둔하지만. 나는 이것을 구현하기 위해 자바를 사용할 것이다.Java에서 텍스트 파일을 구문 분석하는 좋은 방법

샘플 로그 : 23 : 10 2012-07-16 40,558 - [PARAM1 = 1 PARAM2 = 1, 3 당겨 = 0] Paremter 어레이 - - 383

내가 이미 prasing 쓴 127.0.0.1

public Parser(String log) { 
    this.log = log; 
    this.parse(); 

} 

public void parse() { 

    String[] temp = new String[10]; 
    String[] temp2 = new String[10]; 

    temp = log.split(" - "); 
    key = temp[3]; 
    id = Integer.parseInt(key); 
    String IP = temp[1]; 
    String str; 

    String temp3 = temp[2].substring(temp[2].indexOf("g"), temp[2].indexOf("]")); 
    temp = temp3.split(","); 
    str = "param1"; 

    boolean ordered = CheckOrder(temp); 


    if (ordered) { 
     for (int q = 0; q < temp.length; q++) { 

      temp[q] = temp[q].substring(temp[q].indexOf("=") + 1); 

     } 



     if (temp[0].equals("q")) { 
      param= 0; 
     } else if (temp[0].equals("k")) { 
      param= 1; 
     } else { 
      param= 2; 
     } 

     // Same way for all parameters 

    } 


} 
+0

우리가 파싱 할 파일의 샘플을 제공하고 실제로 예상했던 것 (프로그램이하는 일이지만 비교할 수없는 경우 가능한 오류를 발견 할 수 없음) – Miquel

+0

파싱 ​​한 결과가 무엇입니까? –

+0

구문 분석에 성공했습니다. 샘플 로그를 추가했는데, 무엇을 요구하고 있는지, 오류 사례가 코드를 강력하게 만들 수 있는지 고려해 보는 것이 좋습니다. – user1203861

답변

1

확인 당신이 사용하는 모든 방법의 javadoc는, 모든 정격 및 예외적 인 경우 처리해야합니다 :로 작동 코드는 다음

  • 파일이 존재하지 않습니다 : 예외를 던져지고있다. 이 예외를 올바르게 처리하십시오.
  • String.indexOf() 찾을 내용을 찾을 수 없습니다. -1을 반환합니다. 이 케이스를 올바르게 처리하십시오.
  • String.split() 예상 한 길이의 배열을 반환하지 않습니다. 제대로
  • ...

는 여러 하위 방법으로 큰 방법을 분할 각각 하나의 일을이 사건을 처리합니다.

단위 테스트를 작성하여 가능한 모든 입력을 사용하여 메소드가 수행해야 할 작업을 수행하는지 확인하십시오.

"올바르게 처리하는"것은 매우 잘 의미 할 수 있습니다. 계약이 잘 정의 된 형식을 따르는 계약 인 경우 입력이 올바르지 않기 때문에 예외가 발생합니다. 이 경우 코드가 올바르지 않은 로그를 생성합니다. 그러나 모호한 NullPointerException 또는 ArrayIndexOutOfBoundsException보다는 예상 한 형식과 대신에 어떤 형식인지를 알리는 예외를 갖는 것이 좋습니다.

위 내용은 파일 구문 분석뿐만 아니라 작성한 모든 종류의 코드에 적용됩니다.

사이드 참고 :

직후 폐기하고 다른 배열 ( log.split(" - ")에 의해 반환되는 것)에 의해 교체 10 개 요소의 배열을 만드는 점을 무엇
String[] temp = new String[10]; 
temp = log.split(" - "); 

.

관련 문제