클라이언트 요구 사항은 왜 자꾸 바뀌나요 (with. Windows batch file)

2025. 4. 10. 13:50·Side Project
😄 그냥 어제 일어난 재밌는 해프닝이 있어서 쓴 근황 토크입니다.

거의 1년 반만에 연락온 친구에게서 돌발 퀘스트가 들어왔다.

주기적으로 DM이 왔던 걸 생각하면 1년 반은 아닌가?? 여튼 카톡은 그랬음.

 

요구 사항을 분석해보면,

  • 동일 포맷의 csv 파일이 한 폴더에 모여있음.
  • 파일 수는 5,000개 이상
  • 각 파일은 특수문자(과학적 표기법)을 포함하고 있음
  • 89행 데이터가 존재하지 않는 파일도 있음
  • Windows 환경

 

엑셀을 많이 다뤄봤다면 Power Query, 개발자라면 그냥 python 스크립트 뚝딱 작성하고 끝낼 일이다.

문제는 당사자가 개발과 관련한 지식이 전무하다는 점.

관련이 없는 걸 넘어 그냥 코딩을 극혐한다.

 

PC에 당연히 python이 설치되어 있을리도 없었고, 세팅을 해주자니 그것도 번거로운 일이었다.

그럼 Windows 기본 기능을 살려서 만들어주면 되겠거니 싶어서, (내 기준) 고대의 로스트 테크놀러지인 Windows batch file을 써보기로 했다.

 

CSV 포맷이 어떻게 생겨먹었는지 가물가물해서 노트 패드로 열어보니, 콤마(,)를 사용해서 열을 구분하고 있는 거 같다.

그리고 열의 끝에는 ,,,,을 덧붙여주는 식으로 개행을 알리는 건지, 단순히 테이블 열을 맞추는 건지는 모르겠다만 아무튼 이런 구조로 되어 있다.

 

어차피 포맷은 모두 동일하다고 했으므로, 일회용 프로그램 제작에 이런 것까지 고려할 이유는 없다고 판단했다.

batch 파일의 핵심 로직은 굉장히 단순했는데,

:: Process each CSV file
for %%f in (*.csv) do (
    echo Processing: %%f
    
    findstr /n . "%%f" | findstr "^89:" > temp.txt
    
    if exist temp.txt (
        for /f "tokens=2 delims=:" %%a in (temp.txt) do (
            echo %%f,%%a >> %OUTPUT%
        )
    )
)
  1. for %%변수 in (패턴) do (명령): 패턴과 일치하는 각 항목에 대한 명령 실행
  2. findstr /n . "파일" | findstr "^89:": 파일 모든 행에 행 번호 추가하고 89로 시작하는 행 필터링 (temp.txt에 임시저장)
  3. for /f "options" %%변수 in (소스) do (명령): 파일 내용을 줄 단위로 처리하면서 명령 실행
    • tokens=2 delims=: : 콜론으로 구분된 두 번째 토큰을 추출
  4.  결과를 최종 결과 파일에 전부 저장

 

기본적인 명령어들은 이것저것 찾아보면서 하다가, 세부적인 조정은 GPT한테 던져서 가공했다.

 

👇 전체 코드

더보기
@echo off
setlocal enabledelayedexpansion

echo 한글 CSV 행 추출 프로그램
echo ====================
echo.

:: 기본 설정
set ROW_NUMBER=89
set OUTPUT=result.csv

echo 현재 폴더의 모든 CSV 파일에서 %ROW_NUMBER%행을 추출합니다.
echo 결과는 %OUTPUT%에 저장됩니다.
echo.
echo 계속하려면 아무 키나 누르세요...
pause > nul

:: Initialize output file
echo filename,row89data > %OUTPUT%

:: Process each CSV file
for %%f in (*.csv) do (
    echo Processing: %%f
    
    findstr /n . "%%f" | findstr "^89:" > temp.txt
    
    if exist temp.txt (
        for /f "tokens=2 delims=:" %%a in (temp.txt) do (
            echo %%f,%%a >> %OUTPUT%
        )
    )
)

:: Delete temporary file
if exist temp.txt del temp.txt

echo Completed! Results saved to %OUTPUT%.
echo Press Enter to open the file...
pause > nul
start "" "%OUTPUT%"

 

파일 생성은 그냥 .txt 파일 만들 거나, 처음부터 .bat 파일로 만들어서 텍스트 파일로 열어도 되긴 한다.

다만 주의할 것은 나처럼 출력을 한글로 하고 싶다면, 인코딩할 때 ANSI를 사용해야 한다.

안 그러면 CMD의 인코딩 방식과 달라서 "궵ㄳ쒧ㄸ???" 같은 문자를 마주하게 된다.

 

실행해보니 매우 잘 돌아가는 것을 보고 뿌듯.

 

와, 그럼 이제 넘겨주기만 하면 되겠다~~~~

 

?

왜 요구 사항이 갑자기 바뀌는 건데요..

하위 폴더의 경우에는 내가 좀 더 조사했어야 했는데 놓친 부분이라 할 말이 없다.

 

IELTS 공부하다가 재밌어 보이는 의뢰가 들어와서 우다다 해봤지만,

예전에 소프트웨어 설계 시간에 배운 클라이언트 명세를 명확히 정의하도록 이끄는 게 중요한 이유에 대해서 다시금 인지하게 된 해프닝이었다.

저작자표시 비영리 (새창열림)
'Side Project' 카테고리의 다른 글
  • [Side Project] 내가 사용할 Github Badge 정도는 스스로 만들자
  • [Side Project] Small Talk Topics Generator
  • [Side Project] 1. 새로운 MSA 도전 프로젝트 계획
  • [Project] Kakao Chat CI 개발 기록
나죽못고나강뿐
나죽못고나강뿐
싱클레어, 대부분의 사람들이 가는 길은 쉽고, 우리가 가는 길은 어려워요. 우리 함께 이 길을 가봅시다.
  • 나죽못고나강뿐
    코드를 찢다
    나죽못고나강뿐
  • 전체
    오늘
    어제
    • 분류 전체보기 (457)
      • Computer Science (60)
        • Git & Github (4)
        • Network (17)
        • Computer Structure & OS (13)
        • Software Engineering (5)
        • Database (9)
        • Security (5)
        • Concept (7)
      • Frontend (21)
        • React (13)
        • Android (4)
        • iOS (4)
      • Backend (77)
        • Spring Boot & JPA (50)
        • Django REST Framework (14)
        • MySQL (8)
        • Nginx (1)
        • FastAPI (4)
      • DevOps (24)
        • Docker & Kubernetes (11)
        • Naver Cloud Platform (1)
        • AWS (2)
        • Linux (6)
        • Jenkins (0)
        • GoCD (3)
      • Coding Test (112)
        • Solution (104)
        • Algorithm (7)
        • Data structure (0)
      • Reference (134)
        • Effective-Java (90)
        • Pragmatic Programmer (0)
        • CleanCode (11)
        • Clean Architecture (2)
        • Test-Driven Development (4)
        • Relational Data Modeling No.. (0)
        • Microservice Architecture (2)
        • 알고리즘 문제 해결 전략 (9)
        • Modern Java in Action (0)
        • Spring in Action (0)
        • DDD start (0)
        • Design Pattern (6)
        • 대규모 시스템 설계 (6)
        • JVM 밑바닥까지 파헤치기 (4)
      • Service Planning (2)
      • Side Project (5)
      • AI (0)
      • MATLAB & Math Concept & Pro.. (1)
      • Review (17)
      • Interview (2)
      • IT News (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 깃
  • 공지사항

    • 한동안 포스팅은 어려울 것 같습니다. 🥲
    • N Tech Service 풀스택 신입 개발자가 되었습니다⋯
    • 취업 전 계획 재조정
    • 취업 전까지 공부 계획
    • 앞으로의 일정에 대하여..
  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
나죽못고나강뿐
클라이언트 요구 사항은 왜 자꾸 바뀌나요 (with. Windows batch file)

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.