오늘의 개발일지 2020년06월10일 Java 파일에서 정규식을 이용한 문자열 찾기

in SteemCoinPan •  22 days ago 

안녕하세요 가야태자(@talkit) 입니다. 오늘도 정규식을 구하기 위해서 다른 분 소스를 참고 했습니다.

출처 : https://offbyone.tistory.com/400

오늘 제가 찾아서 GIS에 넣고자하는 자료는

경도, 위도,높이

자료 형식이 위와 같이 되어 있습니다.

DEM 이라고 해서 디지털 수치 표고 자료 입니다.

저기서 제가 생각한 약 8km 반격의 위경도의 높이만을 찾아야해서 ^^

어제 작성한 프로그램으로 경도 값은 제가 필요 한 값으로 찾아 놓은 상태 입니다.

그런데, 위도 값도 어제 작성한 프로그램을 조금 수정해서 쓰려고 했는데 불행하게도 높이 자료가 35.으로 시작하는 값이 있어서 제가 원하는 위도가 아닌데 파일에 찍히는 것을 확인 했습니다. ^^

그래서 옛날 습관으로 찾은 것이 정규식입니다.

제가 정규식을 설명해도 좋겠지만,

위 주소에 정규식이 잘 정리 되어 있습니다.

단, 오늘 제가 작성한 정규식만 설명 드리겠습니다.

Pattern pattern = Pattern.compile("12[0-9]\\.[0-9]+," + words[j]);

12라는 숫자로 시작해서 한자의 숫자가오고 // 우리나라는 120도대의 경도에 위치해 있습니다.
그리고, 무조건 . 기호가 중간에 오고 그위에 숫자가 연속되다가 제가 입력한 35.14 정도의 값이 오면 파일에 적도록 구현 했습니다.

아래는 Full 소스 입니다.


package kr.ymmedia.util;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class SearchDEMLAT {
    
    static List<File> targetFiles = null;
    
    static String baseDir = "/data01/LIDAR/gj/result";    //검색할 디렉토리
    static String word = "35.14,35.15,35.16,35.17,35.18,35.19,35.20";         //검색할 단어
    static String save = "/data01/LIDAR/gj/result2/lat"; //검색결과가 저장된 파일명
    
    public static void main( String[] args ) throws Exception
    {
    
        File Dir = new File(baseDir);
        File[] Files = Dir.listFiles();
        
        //읽어들일 파일 input stream 선언
        BufferedReader br = null;
        String[] words = word.split(",");
        for(int i = 0; i < Files.length; i++){
            
             //파일이 아닌 경우 continue
            if(!Files[i].isFile()) {
                continue;
            }
            
          //input stream object 생성
            br = new BufferedReader(new FileReader(Files[i]));
            String line = "";
            
          //저장할 파일 output stream 생성
            
            String message = "";
            //각 파일의 한 라인씩 읽어들인다.
            while((line = br.readLine()) != null) {
                
                
                //라인 내용중 검색하고자  단어가 하나라도 있으면 파일에 기록한다.
                    
                for(int j=0; j<words.length;j++) {
                    Pattern pattern = Pattern.compile("12[0-9]\\.[0-9]+," + words[j]);
            
                    Matcher matcher = pattern.matcher(line);
                        
                    //if(line.startsWith("" + words[j])) {
    
                    if(matcher.find()) {
                        
                        //writer.write(word + "=" + Files[i].getAbsolutePath());
                        //System.out.println(line.trim() + ":" + Files[i].getAbsolutePath());
                        message= message + line.trim() +"\n";
                        continue;
                        
                    }else {
                        //System.out.println("");
                    }
                }
            }
            if(!message.equals("")) {
                System.out.println(i + " : Founded : " + Files[i].getAbsolutePath() );
                PrintWriter writer = new PrintWriter(new FileWriter(save+"_" + i +".txt"));
                writer.write(message);
                writer.flush();
                writer.close();
            }else {
                System.out.println(i + " : No results. : " + Files[i].getAbsolutePath() );
            }
            
            
            //input stream close.
            br.close();
            
            //output stream close.
            
        }
        



        
    
    }
    
}

예쁘지는 않지만 도움이 되셨으면 합니다.

감사합니다.

오늘도 즐거운 하루 되십시오.

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!