yoni

[23][IO] split() 메소드, 데이터 파일을 읽어 성적, 연봉, 단풍 여행 처리 시스템 제작 ★ 본문

java of educational by contents

[23][IO] split() 메소드, 데이터 파일을 읽어 성적, 연봉, 단풍 여행 처리 시스템 제작 ★

yoni-1117 2018. 12. 8. 17:26

[01] split() 메소드
- split(): String[] java.lang.String.split(String regex) 
  하나의 문자열을 주어진 문자열(regex)을 기준으로 분할하여 문자열 배열을 리턴합니다.
  예) String[] values = line.split(",");
[실행 화면]

4
여름
가을
겨울
-----------------------------------
4
--> 봄
-->  
--> 가을
--> 겨울
-----------------------------------
라면,만두,김밥
   라면
   만두
   김밥
김치 찌게,참치 찌게,부대 찌게
   김치 찌게
   참치 찌게
   부대 찌게
 
 
 

▷ oop3.SplitTest.java
-----------------------------------------------------------------------------------

package oop3;

public class SplitTest {

  public static void main(String[] args) {
    String[] list = "봄,여름,가을,겨울".split(",");
    System.out.println(list.length);
    
    for(int i = 0; i < list.length; i++){
      System.out.println(list[i]);
    }
    System.out.println("--------------------------------------------");
    list = "봄,,여름,가을,겨울".split(",");
    System.out.println(list.length);
    
    for(int i = 0; i < list.length; i++){
      System.out.println(list[i]);
    }
    System.out.println("--------------------------------------------");
    String menu = "라면,만두,김밥/김치 찌게,참치 찌게,부대 찌게";
    
    String[] group = menu.split("/"); // 1 차
      for (int i=0; i < group.length; i++) {
        System.out.println(group[i]);
        
        String[] item = group[i].split(","); // 2차
        for (int j=0; j < item.length; j++) {
          System.out.println("  " + item[j]);
        }
      }
  }

}

 

-----------------------------------------------------------------------------------
 
  
 
[02] 데이터 파일을 읽어 성적처리하는 클래스를 작성하세요.
- split(): String[] java.lang.String.split(String regex) 
  하나의 문자열을 주어진 문자열(regex)을 기준으로 분할하여 문자열 배열을 리턴합니다.
  예) String[] values = line.split(",");
- 문자열을 정수로 변환: int price = Integer.parseInt("2500");

1. 데이터 파일

[실행 화면]

왕눈이 학생의 성적을 처리했습니다.
아로미 학생의 성적을 처리했습니다.
홍길동 학생의 성적을 처리했습니다.
가길순 학생의 성적을 처리했습니다.
나길순 학생의 성적을 처리했습니다.
 


▷ C:/홈 폴더/io/data.csv(CSV: Comma Separated Value 파일)
     - split() 메소드 이용
     - 문자열뒤에 공백이 있으면 안됨.

     - 데이터 구조: 성명, java, html, css3
-----------------------------------------------------------------------------------

왕눈이,80,90,100
아로미,75,89,88
홍길동,60,85,77
가길순,100,90,83
나길순,91,92,97

 

-----------------------------------------------------------------------------------


2. 데이터 파일 처리 결과 파일, 자동 생성됨.

▷ C:/홈 폴더/io/data_proc.txt
-----------------------------------------------------------------------------------

 
왕눈이  80    90  100  270   90
아로미  75    89   88   252   84
홍길동  60    85   77   222   74
가길순  100  90   83   273   91
나길순  91    92   97   280   93
 
-----------------------------------------------------------------------------------



3. 처리 클래스(TextCopy.java를 복사하여 사용합니다.)

▷ oop3.DataProc.java
-----------------------------------------------------------------------------------

package oop3;
 
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
 
public class DataProc {
 
  public static void main(String[] args) {
    File src = new File("C:/ai3/io/data.csv");
    File dest = new File("C:/ai3/io/data_proc.txt");
    
    // File -> FileReader -> BufferedReader
    FileReader reader = null;   // 파일 읽기
    BufferedReader br = null; // 읽은 내용을 메모리에 저장
 
    // PrintWriter -> FileWriter -> File
    FileWriter writer = null;    // 파일에 기록
    PrintWriter pw = null;      // 메모리에 기록
    
    try {

      .....
     
          pw.print(name);  // 파일 기록
          pw.print("\t\t"+ java);
          pw.print("\t\t"+ html);
          pw.print("\t\t"+ css3);
          pw.print("\t\t"+ tot);
          pw.print("\t\t"+ avg);
          pw.print("\n");

      .....

 
    } catch (FileNotFoundException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    } finally {
      try { pw.close(); } catch (Exception e) {  }
      try { writer.close(); } catch (Exception e) { }
      try { br.close(); } catch (Exception e) { }
      try { reader.close(); } catch (Exception e) { }
    }
  }
 
}
 
 
  
-----------------------------------------------------------------------------------
 
 
 
[과제 1] 데이터 파일을 읽어 년봉을 출력하는 클래스를 작성하세요.

1. 데이터 파일
- 문자열뒤에 공백이 있으면 안됨.

▷ C:/작업 기준폴더/io/pay.csv(CSV 파일)
     - 데이터 구조: 성명, 월 급여, 경력 년수
-----------------------------------------------------------------------------------

왕눈이,1800000,1
아로미,2000000,2
홍길동,2500000,3
가길순,3000000,5
나길순,3800000,9
-----------------------------------------------------------------------------------
  
 
2. 데이터 파일 처리 결과 파일, 자동 생성(DataProc.java를 복사하여 사용합니다.)
   - 기본급
   - 수당: 경력 년수 * 200000
   - 급여: 기본급 + 수당
   - 년봉 = 급여 * 13

▷ C:/작업 기준 폴더/io/pay_proc.txt
-----------------------------------------------------------------------------------

성명: 왕눈이
기본급: 1800000 원
경력: 1 년
수당: 200000 원
급여: 2000000 원
년봉: 26000000 원
----------------------
성명: 아로미
기본급: 2000000 원
경력: 2 년
수당: 400000 원
급여: 2400000 원
년봉: 31200000 원
----------------------
.....
 
-----------------------------------------------------------------------------------


3. 처리 클래스
   - split() 메소드 이용
  
▷ oop3.PayProc.java
-----------------------------------------------------------------------------------

package oop3;
 
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
 
public class PayProc {
 
  public static void main(String[] args) {
    File src = new File("C:/ai3/io/pay.csv");
    File dest = new File("C:/ai3/io/pay_proc.txt");
    
    // File -> FileReader -> BufferedReader
    FileReader reader = null;   // 파일 읽기
    BufferedReader br = null; // 읽은 내용을 메모리에 저장
 
    // PrintWriter -> FileWriter -> File
    FileWriter writer = null;    // 파일에 기록
    PrintWriter pw = null;      // 메모리에 기록
    
    try {
 

      .....

          pw.println("성명: " + name);  // 파일 기록
          pw.println("기본급: " + basic + " 원");
          pw.println("경력: " + year + " 년"); 
          pw.println("수당: " + sudang + " 원");
          pw.println("급여: " + salary + " 원");
          pw.println("연봉: " + total + " 원");
          pw.println("----------------------");
      .....
      
    } catch (FileNotFoundException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    } finally {
      try { pw.close(); } catch (Exception e) {  }
      try { writer.close(); } catch (Exception e) { }
      try { br.close(); } catch (Exception e) { }
      try { reader.close(); } catch (Exception e) { }
    }
  }
 
}
 
 
  
-----------------------------------------------------------------------------------



[과제 2] 단풍 여행 처리 시스템

1. 데이터 파일
- 문자열뒤에 공백이 있으면 안됨.
 
▷ C:/작업 기준폴더/io/maple.csv(CSV 파일)
     - 데이터 구조: 목적지, 날짜, 회비, 인원수, 케이블카 탑승 인원수
-----------------------------------------------------------------------------------

내장산,2016-11-10,50000,4,0
설악산,2016-10-15,55000,2,2
덕유산,2016-10-20,60000,2,0
소백산,2016-11-10,40000,3,3
태백산,2016-11-25,35000,5,2
-----------------------------------------------------------------------------------


2. 데이터 파일 처리 결과 파일, 자동 생성
   - 케이블카 금액: 인원수 * 12,000 원
   - 총금액 = (회비 * 인원수) + 케이블카 금액

▷ C:/작업 기준 폴더/backup/maple_proc.txt
-----------------------------------------------------------------------------------

목적지: 내장산
날짜: 11월 10일
회비: ₩ 50,000 원
인원수: 4 명
케이블카: 0 명
케이블카 금액: ₩ 0 원
총금액: ₩ 200,000 원
-------------------------------
목적지: 설악산
날짜: 10월 15일
회비: ₩ 55,000 원
인원수: 2 명
케이블카: 2 명
케이블카 금액: ₩ 24,000 원
총금액: ₩ 134,000 원
-------------------------------
.....

-----------------------------------------------------------------------------------
 
 
3. 처리 클래스

   - split() 메소드 이용
   - 천단위 구분기호 출력
     DecimalFormat df = new DecimalFormat("₩ #,###,### 원");
     String basic = df.format(1800000);
   - substring() 메소드 이용

 
▷ oop3.MapleProc.java(PayProc.java를 복사하여 사용합니다.)
-----------------------------------------------------------------------------------

package oop3;
 
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.DecimalFormat;
 
public class MapleProc {
 
  public static void main(String[] args) {
    File src = new File("C:/201810_java/io/maple.csv");
    File dest = new File("C:/201810_java/io/maple_proc.txt");
    
    // File -> FileReader -> BufferedReader
    FileReader reader = null;   // 파일 읽기
    BufferedReader br = null; // 읽은 내용을 메모리에 저장
 
    // PrintWriter -> FileWriter -> File
    FileWriter writer = null;    // 파일에 기록
    PrintWriter pw = null;      // 메모리에 기록
    
    try {
      reader = new FileReader(src);      // Call By Reference, 해시코드 전달
      br = new BufferedReader(reader); // Call By Reference, 해시코드 전달
      
      // false: 기존 내용을 지우고 기록, true: 파일 하단에 추가
      writer = new FileWriter(dest, false);  
      pw = new PrintWriter(writer);
      
      while(true) {
        String line = br.readLine(); // 내장산,2016-11-10,50000,4,0
        if (line == null) { // 파일 마지막인지 검사
          break; // while 탈출
        } else {
          System.out.println(line); // 화면 출력
          
/*
목적지: 내장산
날짜: 11 월 10 일
회비: ₩ 50,000 원
인원수: 4 명
케이블카: 0 명
케이블카 금액: ₩ 0 원
총금액: ₩ 200,000 원
 
내장산,2016-11-10,50000,4,0
*/
          String[] values = line.split(",");
          String mountain = values[0]; // 산
          String _date = values[1];
          // String str = "2016-11-10";
          // 11월 10일
          // String date = str.substring(5, 7) + "월 " + str.substring(8, 10) + "일";
          String date = _date.substring(5, 7) + "월 " + _date.substring(8, 10) + "일";
          
          int price = Integer.parseInt(values[2]);
          int count = Integer.parseInt(values[3]);
          int cable = Integer.parseInt(values[4]);
          int cable_price = cable * 12000; 
          int total = (price * count) + cable_price;
          
          DecimalFormat df = new DecimalFormat("₩ #,###,### 원");
          
          pw.println("목적지: " + mountain);  // 파일 기록
          pw.println("날짜: " + date);
          pw.println("회비: " + df.format(price)); 
          pw.println("인원수: " + count + " 명");
          pw.println("케이블카: " + cable + " 명");
          pw.println("케이블카 금액: " + df.format(cable_price));
          pw.println("총금액: " + df.format(total));
          pw.println("-------------------------------");
        }
      }
      
    } catch (FileNotFoundException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    } finally {
      try { pw.close(); } catch (Exception e) {  }
      try { writer.close(); } catch (Exception e) { }
      try { br.close(); } catch (Exception e) { }
      try { reader.close(); } catch (Exception e) { }
    }
  }
 
}
 
 
 
-----------------------------------------------------------------------------------
  


Comments