해결된 질문
작성
·
519
·
수정됨
답변 1
1
재완님 안녕하세요?^^
먼저 f스트링에서 {를 표시하는 방법에 대해 설명을 드려야 할 것 같습니다.
기본적으로 아래 예제처럼
>>> a = 1
>>> b = f"aa{a}"
>>> print(b)
aa1
라고 출력되는 건 알고 계실 겁니다.
그런데 제가 출력하고 싶은 문자열이 "aa{1}" 라면요? f스트링을 어떻게 만들어야 할까요?
그 땐 아래처럼 조금 복잡해집니다. 이유는 바로 말씀드리겠습니다.
>>> a = 1
>>> b = f"aa{{{a}}}"
>>> print(b)
aa{1}
원하는 대로 출력되었죠?
왜 세 겹이나 필요하나면,
f스트링 안에서 문자 그대로의 중괄호를 출력하려면 중괄호를 두 겹으로 입력해야 하기 때문입니다.
(바깥 두 겹의 중괄호가 문자 그대로의 중괄호 한 겹으로 바뀐 겁니다.)
그럼, 이제 재완님도 f스트링 안에서 리터럴한(문자 그대로의) 중괄호를 몇 겹이든 표현하실 수 있겠죠?
다시 아래아한글로 돌아와서
hwp.PutFieldText의 문법 중에 이런 게 있습니다.
동일한 이름의 필드명이 여러 개 있을 때
특정 순서의 필드 값 하나만 바꾸고 싶을 경우가 있잖아요?
그 때 (f스트링과 무관하게) 중괄호를 두 겹 넣고 그 안에 인덱스를 넣으면 됩니다.
예를 들어 "이름"이라는 필드가 다섯 개 있는데
다른 필드는 그대로 두고,
세 번째 필드에만 "홍길동"이라는 문자열을 입력하고 싶다면?
그 때는 아래와 같이 실행하시면 됩니다.
hwp.PutFieldText("이름{{2}}", "홍길동")
원하는 대로 바뀌었죠?
(혹시 벌써 다 이해를 해 버리셨다면 대단하신 거예요^^)
다시 처음의 엑셀예제로 돌아가봅시다.
hwp.PutFieldText(f"{field}{{{{{index}}}}}", value[idx])
우리의 의도는 아래아한글 문서의 field라는 같은 이름의 여러 개의 필드 중
index번째의 값만 value[idx]로 바꾸고 싶은 거거든요.
예를 들어 field가 "이름"이고 index가 2라면
원래 우리가 입력해야 할 코드는
hwp.PutFieldText("이름{{2}}", value[idx])
가 되어야 하는데, 우리는 한 단계 더 응용해서 f스트링을 사용할 것이기 때문에
hwp.PutFieldText("{field}{{{{{index}}}}}", value[idx])
라고 입력한 것입니다.
바깥 네 겹의 중괄호가 문자 그대로의 중괄호 두 겹이 되었고,
가장 안에 있는 중괄호 하나가 index 변수와 함께 실제 index값으로 치환된 것입니다.
간단한 개념인데 제 설명이 너무 장황하네요ㅜㅜㅜㅜㅜ 반성합니다..
f스트링의 중괄호와 아래아한글 필드의 중괄호 두 겹이 함께
중괄호 다섯겹 대환장 스파게티파티를 벌이게 된 것입니다..ㅜ
부디 궁금증이 해결되었기를 바랍니다.
혹시 설명 중에 이해가 안 가는 부분이 있으면
다시 댓글 남겨주시면 고민해보고 다시 회신드리겠습니다^^
행복한 하루 되세요!!!
예. 정확하게 이해하셨습니다^^
달아주신 답변을 조금만 다듬어보면
제일 밖에 네 겹은 중괄호 두 겹을 표시하기 위해서(아래아한글 문법 때문에)
그리고 제일 안에 한 겹은 index를 치환하기 위해서.
입니다^^
개떡같은 설명에도 찰떡같이 이해해 주셔서 감사드립니다ㅎ
^^ 빠른 답변 감사합니다.
결국 아래아한글 hwp.PutFieldText의 문법 때문에 (중괄호 2개를 쓰는거) 5중이 되었던 거네요..ㅎㅎ
제일 밖에 2개는 {}를 표시하기 위해서,,그다음 두개는 아래아한글 문법 때문에..나머지 한개는 f에서 index값을 치환하기 위해서라는 말씀이죠...
이해했습니다..다시한번 감사드립니다..