NCalc가 매우 유용한 문제에 대해
3435 단어 ncalc수식 해석오픈 소스.NETFrameworkC#
배경
조금이라도 프리 포맷으로 입력된 식을 해석해 계산하는 처리가 필요하게 되었다.
예를 들면 「매출」이라고 하는 테이블이 있었다고 한다.
CREATE TABLE Sale '売上'
(
product_id INT PRIMARY KEY , '商品ID'
price INT, '価格'
unit INT, '売上数量'
) ;
그래서 사용자는 수식으로
가격 × 매출 수량으로 상품의 총 매출액을 산출하는, 같은 이미지다.
이 손은 파서를 활용해 문장을 정의하거나 하는 것이 왕도인 것 같지만, 꽤 어려운 분야이기도 하다.
그래서 어쩐지 좀 더 직관적으로 편하게 사용할 수 있는 라이브러리라든지 없을까-와 찾고 있으면 NCalc가 걸렸다.
NCalc란?
가장 먼저 걸린 페이지가 아래다.
h tp : // 겨우 p로g 라민 g. 그래. 네트/아르치 c㎇/458949172. HTML
그래서, 거기에서 NCalc에 대해 조사해 보면 우선 이하의 사이트가 히트했다.
htps : // 아 r ゔ ぇ. 여기서 pㅇx. 이 m/? p = 똥 lc
과연 사용법 자체는 그리 어렵지 않다.
인스턴스 생성시에 계산식을 주어 Evaluate를 실행하면 object형으로 계산 결과를 돌려주는 것 같다.
변수를 주었을 경우에서도 파라미터로서 정의하면 계산해 준다. 이것은 확실히 편리할 것 같다.
NuGet에서 얻거나 자력으로 빌드할지
NuGet 패키지로 제공되고 있는 것 같기 때문에 NuGet 패키지 매니저로부터 인스톨을 시도한다.
ncalc 자체는 즉시 발견됩니다. 그 밖에도 몇 가지 있는 것 같지만 이것으로 괜찮을 것 같아… … 응?
게시일이 2011년 11월에 최신 버전이 1.3.8? 야케에 낡다. 싫은 예감이 되어 프로젝트 URL로 점프해 본다.
아무도 7년전에 갱신이 멈추고 있는 녀석…
라이센스도 확인하고 싶지만 보이지 않는다. 이것을 사용할 수 없다고 포기하면서 페이지를 잡고 있다면
htps : // 기주 b. 코 m / shie tsyn c / 넉카 lc / 이스에 s / 5
요컨대 yallie씨라고 하는 사람이 이 프로젝트를 계승해 새로운 프로젝트를 작성해 주는 것 같다.
그것이 이것 ↓
htps : // 기주 b. 코 m / 넉카 lc / 넝카 lc
라이선스도 명시되어 있고, 갱신도 적당하다.
사용하고 싶은 경우는 이쪽을 사용하는 것이 확실할 것이다.
다만 이쪽은 NuGet 패키지가 아니기 때문에 사용하고 싶은 경우는 GitHub로부터 소스를 다운로드할 필요가 있다.
NCalc의 기타 주의점
사용할 수 있는 계산 기호는↓. 대소 판정에 의한 true/false의 반환도 가능하다.
htps : // 기주 b. 코 m / 넉카 lc / 넵카 lc / 우키 / 오페라와 rs
사용할 수 있는 함수는↓. 함수내에 파라미터를 사용하는 것도 물론 가능.
htps : // 기주 b. 코 m / 넉카 lc / 넵카 lc / 우키 / 훙 c 치온 s
여러가지 검증해 보았지만 단순한 사칙 연산 레벨이라면 전혀 문제 없다.
주의점으로서는 전각 문자를 사용할 수 없을 정도일까.
이것은 NCalc라고 하는 것보다 NCalc가 이용하고 있는 Antlr 때문이다. 원래 프로그램 언어로 전각을 사용하자는 혼담이 이미 응석이다.
덧붙여서 일본어는 당연한 일이지만 계산기호의 전각(+)같은 것도 인식하지 않는다.
※Antlr의 버전을 3에서 4로 올리면 대응할 수 있는 것 같은 기사도 보였지만, 별로 확증은 없고, Antlr 3에서 Antlr 4로의 마이그레이션은 상당히 곤란을 초래한다. 문법 자체가 크게 바뀌고 있는 것이다.
그래서 첫번째 예에 든 가격 × 매출 수량 같은 계산은 그대로는 할 수 없기 때문에, UI상은 일본어 입력시켜 두면서 뒤편에서는 일본어명과 영어명(price, unit)을 매핑 해 두면 좋다 것입니다.
그리고는 항목명과 계산 기호 그 자체의 해석을 어떻게 할까라고 하는 사양은 사람에 의해 바뀔 것이기 때문에 거기엔은 돌진하지 않는다.
이 라이브러리는 매우 사용하기 쉽기 때문에 문자열 그대로 계산하고 싶은 것 같은 수요가 발생했을 때는 후보의 하나로서도 좋다고 생각한다.
Reference
이 문제에 관하여(NCalc가 매우 유용한 문제에 대해), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kingdog/items/065689e8ec241c97bced텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)