클라이언트 요구 사항은 왜 자꾸 바뀌나요 (with. Windows batch file)
😄 그냥 어제 일어난 재밌는 해프닝이 있어서 쓴 근황 토크입니다.

거의 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%
)
)
)
- for %%변수 in (패턴) do (명령): 패턴과 일치하는 각 항목에 대한 명령 실행
- findstr /n . "파일" | findstr "^89:": 파일 모든 행에 행 번호 추가하고 89로 시작하는 행 필터링 (temp.txt에 임시저장)
- for /f "options" %%변수 in (소스) do (명령): 파일 내용을 줄 단위로 처리하면서 명령 실행
- tokens=2 delims=: : 콜론으로 구분된 두 번째 토큰을 추출
- 결과를 최종 결과 파일에 전부 저장
기본적인 명령어들은 이것저것 찾아보면서 하다가, 세부적인 조정은 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 공부하다가 재밌어 보이는 의뢰가 들어와서 우다다 해봤지만,
예전에 소프트웨어 설계 시간에 배운 클라이언트 명세를 명확히 정의하도록 이끄는 게 중요한 이유에 대해서 다시금 인지하게 된 해프닝이었다.