반응형

"Thema.문서보안 Excel-file, Java POI로 작업하기" 

    1. 암호화된 Excel-file을 Excel-VBA를 이용하여 Text-file로 생성한다.( Delimeter 이용 )

    2. Java로 Text-file을 읽는다.

        - Excel의 Cell내용중 '줄 바꿈'문자가 있을 경우, 라인 병합하기

    3. Apache POI Library를 이용하여 결과를 Excel-file로 출력한다.( 신규 Excel-file 생성 )

위의 사례처럼 내용중 개행문자에 의해 줄 바꿈이 일어난 문서를 Java로 읽을때의 예시입니다.

 

  - ① 라인을 시작하는 '시작 문자'로 판단하는 방법과

  - ② 형식이 있는 문서의 '데이터 갯수'로 판단하는 방법 중

 

데이터의 갯수로 판단하는 ②번에 해당하는 방법입니다.

package Java;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;

/**
 * 줄 바꿈 병합하기
 * : Text-file의 내용 중, 내용內 줄바꿈 문자의 의해 개행된 줄을 병합한다.
 *   ( 데이터의 갯수를 확인하여 라인 병합 )
 * 
 * @author PSG
 *
 */
public class ReadMultiLine {

	public static void main(String[] args) {
		
		ArrayList<ArrayList<String>> arr2Result = new ArrayList<ArrayList<String>>(); 
		
		String strFile = "./src/SampleData/ReadMultiLine.dat";
		int iCnt = 6;
		
		try {
			
			@SuppressWarnings("unused")
			BufferedReader br = new BufferedReader( new FileReader( new File( strFile ) ) );
			
			String strLine = "";
			boolean bMulti = false;
			
			while( ( strLine = br.readLine() ) != null ) {
				
				if( strLine.trim().isEmpty() ) continue;
				
				ArrayList<String> arrLine = new ArrayList<String>();
				
				String[] saCol = strLine.split( "\\^" );  // Delimeter를 이용하여 데이터 분할
				
				// Multi-Line 처리
				if( bMulti && saCol.length < iCnt ) {
					
					// 이전Row에 추가
					arrLine = arr2Result.get( arr2Result.size() - 1 );
					
					// 라인을 병합한다.
					for( int i = 0; i < saCol.length; i++ ) {
						
						if( i == 0 ) arrLine.set( arrLine.size() - 1,  arrLine.get( arrLine.size() - 1 ) + "\n" + saCol[i] );
						else arrLine.add( saCol[i].trim() );
					}
					
					// 멀티라인 bit 초기화하고 Next-Line 처리
					bMulti = false;
					continue;
				}
				
				// 데이터갯수가 적으면 '줄 바꿈'문자의 의핸 개행으로 판다.
				if( saCol.length < iCnt ) bMulti = true;
				
				for( int i = 0; i < saCol.length; i++ ) arrLine.add( saCol[i].trim() );
				
				arr2Result.add( arrLine );
			}
			
		}catch( Exception ex ) {
			ex.printStackTrace();
			System.exit(0);
		}
		
		// 결과 출력
		for( int i = 0; i < arr2Result.size(); i++ ) System.out.println( arr2Result.get(  i ) );
	}
}

결과를 System.out.println()으로 출력한 내용입니다.

 

끝.

반응형