fmtf
Statistics + Control & Dynamics 중심의 Octave 학습 예제
ex-pkg/fmtf.m
함수 시그니처
function [formatted_str, var_list] = fmtf(fmt_str) 전체 코드
전체 코드를 복사해서 Octave에서 바로 실행할 수 있습니다.
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 코드 해설
목적
Statistics + Control & Dynamics 중심의 Octave 학습 예제
입력
- 파라미터: fmt_str
출력
- 반환값: formatted_str
- 반환값: var_list
- 콘솔 텍스트 출력
실행 흐름
- 입력
- 출력
- formatted_str - 포맷팅된 결과 문자열
핵심 함수/주제
dispisemptylengthcellfunendsWitherrorevalinisnumeric
실습 과제
- 같은 연산을 내장 함수와 사용자 함수 두 방식으로 계산해 오차를 비교해보세요.
- 질량/감쇠/강성 또는 전달함수 계수를 바꿔 응답 변화를 확인해보세요.
- 핵심 함수 disp의 인자를 한 가지 바꿔 결과 변화를 기록해보세요.
학습 팁
같은 카테고리의 다른 코드
- ex-cms
ex-pkg/ex-cms.m - ex-control
ex-pkg/ex-control.m - ex-fmt
ex-pkg/ex-fmt.m - ex-fstring
ex-pkg/ex-fstring.m - ex-image
ex-pkg/ex-image.m - ex-io
ex-pkg/ex-io.m - ex-optim
ex-pkg/ex-optim.m - ex-signal
ex-pkg/ex-signal.m - ex-statistics
ex-pkg/ex-statistics.m - ex-symbolic
ex-pkg/ex-symbolic.m