← 목록
기타 2026-07-12 4KB 읽기 3분

크라우니워드프로세서 기초도구 — 메일머지

개요

크라우니워드프로세서 기초도구 시리즈의 "메일머지"(편지병합) 도메인을 완전 한선씨(hanseonc_high)로 작성. 템플릿 {{필드}} 자리표시자 + PSV(파이프구분) 데이터를 병합해 개인화 문서를 대량 생성하는 기능 일체.

무엇을 했는지

  • 파일: /Users/ef/crowny-word/도구/메일머지.한선 (자기완결, 가져오기 없음)
  • 함수 명세 10개 전부 구현 + 내부 헬퍼 4개(나누기/합치기/찾기부분/배열찾기) + 지원 헬퍼 3개(헤더배열가져오기/행필드가져오기/필드값찾기/기본값찾기):
  • 템플릿필드추출{{필드}} 자리표시자 스캔, {{#if}}/{{/if}} 제어태그 제외, 중복제거
  • PSV데이터파싱 — 헤더+행 텍스트 → 빈줄제거 줄배열(줄배열[0]=헤더)
  • 매핑검증 — 템플릿 필드 전부가 PSV 헤더에 존재하는지 확인("유효"/"누락:필드1,필드2")
  • 병합1건 — 조건필드 해소 → 자리표시자 치환(인라인기본값 우선 → 기본값테이블 → 빈문자열)
  • 병합전부 — 전체 데이터행 일괄 병합
  • 조건필드{{#if 필드}}...{{/if}} 기초 조건블록(값이 비었거나 "0"/"거짓"이면 블록 제거)
  • 누락기본값 — 값 비었을 때 기본값테이블("필드1:값1|필드2:값2")에서 대체값 조회
  • 미리보기 — 최대건수만큼만 병합, "\n---\n" 구분선으로 이어붙임
  • 병합저장 — flat 파일명(/tmp/<접두사>_<순번>.txt)으로 저장, 동적 서브디렉 없음
  • 병합통계"총레코드:N|필드수:K|성공:M" 통계 문자열
  • 데이터 모델: PSV 원문(줄바꿈 구분 행, | 구분 필드). 템플릿 자리표시자는 {{필드}} 또는 {{필드:인라인기본값}}.
  • 이식: 서식런.한선/각주미주.한선/수식표현.한선의 나누기/콜론위치찾기류 관용구를 일반화한 찾기부분(문자열,시작,패턴)(다중문자 탐색)으로 재구성해 이 파일에 재이식.
  • 검증

    cd /Users/ef/CrownyOS/crownyc
    ./hanseonc_high /Users/ef/crowny-word/도구/메일머지.한선 > /tmp/메일머지.toau 2>/tmp/메일머지.err
    ./crownyc run /tmp/메일머지.toau
    
    결과: 검사: PASS 32/32 (1차 컴파일·1차 실행에서 전체 통과, 재수정 불필요).

    관련 파일

    • /Users/ef/crowny-word/도구/메일머지.한선 (신규)
    • 참고 이식원: /Users/ef/crowny-word/도구/서식런.한선, /Users/ef/crowny-word/도구/각주미주.한선, /Users/ef/crowny-word/도구/수식표현.한선

    크라우니코드

    • learn.sh search "메일머지" / "템플릿 필드 치환" / "PSV 파싱" / "구분자 분리" → 전부 MISS(학습DB·패턴DB 무매칭)
    • 작성 후 learn.sh add 4건(템플릿필드추출/조건필드/병합1건/PSV파싱+병합저장) — 앞 3건은 PostToolUse 훅이 Write 시점에 이미 자동학습(중복 스킵), 1건은 신규 등록됨. search "메일머지" 재조회로 fn_메일머지_* 등재 확인.

    잔여 이슈

    • PSV 필드 값에 "|"나 개행이 들어가면 파싱이 깨짐(이스케이프 미구현) — 문서파일.한선/각주미주.한선과 동일한 "구분자와 겹치는 문자는 필드에 안 넣는다" 관례로 문서화만 해둠.
    • 조건블록은 중첩·else 없는 기초형만 지원(명세 그대로, "기초"로 한정).
    • 병합저장은 저장 성공 여부를 파일 존재 확인 없이 반환(쓰기() 실패 시에도 카운트 증가) — 필요 시 읽기() 재확인 가드 추가 가능.