카테고리
Package Drillpackage-drill
코드와 해설을 함께 읽는 학습 문서
Code Detail
Statistics + Control & Dynamics 중심의 Octave 학습 예제
ex-pkg/fmtf.m
코드를 복사해 Octave에서 바로 실행할 수 있습니다.
function [formatted_str, var_list] = fmtf(fmt_str)
62 lines
function [formatted_str, var_list] = fmtf(fmt_str)
% fmtf 함수는 Python의 f-string과 유사하게 중괄호 {변수:형식}을 사용하여
% 문자열 내에서 변수를 치환하는 함수입니다.
%
% 입력:
% fmt_str - 포맷팅할 문자열 (예: "Value: {value:.2f}")
%
% 출력:
% formatted_str - 포맷팅된 결과 문자열
% var_list - 치환된 변수 목록
%
% 사용 예시:
% name = "Alice";
% age = 30;
% [formatted_str, var_list] = fmtf("Name: {name}, Age: {age}\n");
% disp(formatted_str);
% disp(var_list);
%
% 중괄호 안의 변수명과 형식을 추출 (정규 표현식 사용)
tokens = regexp(fmt_str, "\\{([^{}:]+)(?::([^{}]+))?\\}", "tokens");
var_list = cellfun(@(x) x{1}, tokens, "UniformOutput", false); % 변수 목록 저장
for i = 1:length(tokens)
var_name = tokens{i}{1}; % 변수명
format_spec = "";
if length(tokens{i}) > 1 && ~isempty(tokens{i}{2})
format_spec = tokens{i}{2}; % 형식 지정자
end
% 호출된 환경에서 변수 값을 가져오기
try
var_value = evalin("caller", var_name);
catch
error("Undefined variable: %s", var_name);
end
% 값이 숫자일 경우 지정된 형식 적용
if isnumeric(var_value)
if ~isempty(format_spec)
var_value_str = ["%" format_spec];
else
var_value_str = "%d";
end
else
var_value_str = "%s";
end
% 원본 문자열에서 `{변수:형식}`을 해당 포맷 문자열로 치환
match_pattern = ["{" var_name "(:[^}]*)?}"];
fmt_str = regexprep(fmt_str, match_pattern, var_value_str, "once");
end
formatted_str = fmt_str;
% 원본 문자열의 끝에 개행 문자가 있었다면 유지
if endsWith(fmt_str, "\n")
formatted_str = [formatted_str "\n"];
end
end ex-pkg/ex-cms.m
ex-pkg/ex-control.m
ex-pkg/ex-fmt.m
ex-pkg/ex-fstring.m
ex-pkg/ex-image.m
ex-pkg/ex-io.m
ex-pkg/ex-optim.m
ex-pkg/ex-signal.m