XLS2GMS
저자
Erwin Kalvelagen, GAMS 개발 공사
버전
2.4
날짜
2004년 5월

개요

주의
XLS2GMS더 이상 사용되지 않습니다(참조GAMS 42 XLS2GMS 출시 노트). 이용해주세요에이전트 ExcelReader 연결대신.

XLS2GMS는 Microsoft Excel 스프레드시트의 스프레드시트 데이터를 GAMS가 읽을 수 있는 형식으로 변환하는 도구입니다. 소스는 MS Excel 스프레드시트 파일(*.슬롯)이고 대상은 GAMS 포함 파일입니다.

참고
XLS2GMS는 Windows에서만 사용할 수 있습니다.

실행 파일을 실행할 때XLS2GMS.EXE명령줄 매개변수가 없으면 도구가 실행됩니다.대화형으로내장된 GUI 인터페이스가 있습니다. 또는 XLS2GMS를 다음에서 실행할 수 있습니다.배치 모드이는 GAMS 모델에서 직접 호출할 때 유용합니다.$call명령.

도구의 철학은 스프레드시트의 내용을 다음과 같이 고려하는 것입니다.텍스트. 이 텍스트에는 GAMS 문 또는 GAMS 문의 일부(예: 테이블 문의 데이터 부분)가 포함될 수 있습니다. 텍스트는 셀 경계를 유지하기 위해 일부 간격이 도입된 GAMS 포함 파일로 내보내집니다. 이를 통해 테이블을 GAMS 포함 파일로 직접 내보낼 수 있습니다.

요구사항

XLS2GMSWindows(95/98/NT/XP)를 실행하고 MS Excel이 설치된 PC에서만 실행됩니다. Microsoft Excel은 MS Office 제품군에 포함되어 있습니다.

스프레드시트 데이터를 GAMS 데이터로 변환 중

스프레드시트 데이터는 GAMS 모델로 가져오기에 적합한 것과 다르게 구성되는 경우가 많습니다. 어떤 경우에는 데이터가 여러 시트에 분산되어 있으며 GAMS 모델에서 사용되는 보다 구조화된 다차원 매개변수와 호환되지 않는 형식으로 되어 있습니다. 스프레드시트 데이터를 GAMS 매개변수로 내보내려면 도구는 스프레드시트 내에서 사용할 엄격한 형식을 요구하거나 도구에서 이해할 수 있도록 스프레드시트의 데이터 표현을 설명하는 복잡한 사양 단계를 제공해야 합니다. 이 도구는 첫 번째 접근 방식을 사용합니다. 즉, 모델러는 잘 정의된 형식으로 스프레드시트의 데이터를 배치해야 합니다. 새로운 형식을 정의하는 대신 GAMS 언어 구문을 필수 표현으로 사용합니다. 실제로 스프레드시트는 GAMS 소스 코드의 대체 편집기로 간주됩니다.

예를 들어 모델의 GAMS 테이블을 고려하십시오.[TRNSPORT]이것은의 일부입니다.GAMS 모델 라이브러리:

테이블 d(i,j) '거리(천 마일)'
              뉴욕 시카고 토피카
   시애틀 2.5 1.7 1.8
   샌디에고 2.5 1.8 1.4;

이 테이블은 다음과 같이 스프레드시트로 편안하게 표현할 수 있습니다:

XLS2GMS이 테이블을 GAMS 포함 파일로 변환할 수 있으며 그 결과는 다음과 같습니다.

* ----------------------------------------
* XLS2GMS 버전 2.4, 2004년 5월
* Erwin Kalvelagen, GAMS 개발 회사
* ----------------------------------------
* 응용 프로그램: 마이크로소프트 엑셀
* 버전: 9.0
* 워크북: D:\gams projects\xls2gms\ver2.0\Book2.슬롯
* 시트: 시트1
* 범위: $A$1:$D$3
* ----------------------------------------
        뉴욕 시카고 토피카
시애틀 2.5 1.7 1.8
샌디에고 2.5 1.8 1.4
* -------------------------------------------

이 도구는 테이블 문이 GAMS 모델에서 사용될 수 있도록 열의 셀을 정렬된 상태로 유지하려고 시도합니다. 위 파일book2.inc다음을 통해 GAMS 모델로 직접 가져올 수 있습니다.

테이블 d(i,j) '거리(천 마일)'
$include book2.inc
;

도구는 특별한 형식을 기대하지 않으므로 다음과 같이 스프레드시트에 테이블 명령문을 포함할 수 있습니다.

이 결과는 다음과 같습니다:

* ----------------------------------------
* XLS2GMS 버전 2.4, 2004년 5월
* Erwin Kalvelagen, GAMS 개발 회사
* ----------------------------------------
* 응용 프로그램: 마이크로소프트 엑셀
* 버전: 9.0
* 워크북: D:\gams projects\xls2gms\ver2.0\Book3.슬롯
* 시트: 시트1
* 범위: $A$1:$D$5
* ----------------------------------------
테이블 d(i,j) '거리(천 마일)'
        뉴욕 시카고 토피카
시애틀 2.5 1.7 1.8
샌디에이고 2.5 1.8 1.4
;
* -------------------------------------------

어떤 경우에는 위의 형식에 맞게 데이터를 복사하고 처리해야 할 수도 있습니다. 통합 문서에 이 목적을 위한 전용 시트를 추가하는 것이 편리합니다. 이 인터페이스 시트는 값을 자동으로 업데이트하는 수식을 사용하여 수동으로 채울 수도 있고, 매크로(VBA로 기록되거나 프로그래밍된)를 사용하여 채울 수도 있습니다.

세트 가져오기

세트가 수직으로 구성되어 있으면 직접 가져올 수 있습니다. 다음 그림은 세로(A1:A3) 및 가로(B5:D5)로 구성된 a,b,c 요소가 있는 두 세트가 있는 스프레드시트를 보여줍니다.

첫 번째 세트는 다음을 사용하여 직접 가져올 수 있습니다:

내가 설정한 /
$call =xls2gms r=a1:a3 i=book4.슬롯 o=set1.inc
$include set1.inc
/;

나는 표시;

두 번째 세트는 요소 사이에 구분 쉼표를 추가해야 하기 때문에 다소 더 어렵습니다. 이는 다음을 통해 수행할 수 있습니다.

j 설정 /
$call =xls2gms r=b5:d5 s="," i=book4.슬롯 o=set2.inc
$include set2.inc
/;

디스플레이 j;

이렇게 하면 포함 파일이 생성됩니다:

* ----------------------------------------
* XLS2GMS 버전 2.4, 2004년 5월
* Erwin Kalvelagen, GAMS 개발 회사
* ----------------------------------------
* 응용 프로그램: 마이크로소프트 엑셀
* 버전: 9.0
* 워크북: D:\gams projects\xls2gms\ver2.0\Book4.슬롯
* 시트: 시트1
* 범위: $B$5:$D$5
* ----------------------------------------
a,b,c
* -------------------------------------------

세트 및 테이블 가져오기

테이블

3가지 GAMS 데이터가 포함된 것으로 간주될 수 있습니다.

  • set i (시애틀, 샌디에고)
  • set j(뉴욕, 시카고, 토피카)
  • 거리

이 모든 정보는 다음과 같이 읽을 수 있습니다:

내가 설정한 /
$call =xls2gms r=a3:a4 i=book3.슬롯 o=seti.inc
$include seti.inc
/;

j / 설정
$call =xls2gms r=b2:d2 s="," i=book3.슬롯 o=setj.inc
$include setj.inc
/;

테이블 d(i,j)
$call =xls2gms r=a2:d4 i=book3.슬롯 o=pard.inc
$include pard.inc
;

i, j, d를 표시합니다.

위의 $call 문은 다음과 같이 하나로 결합될 수 있습니다:

$onEcho > book3a.txt
i=%system.fp%book3.슬롯
r1=a3:a4
o1=seti.inc
r2=b2:d2
o2=setj.inc
s2=","
r3=a2:d4
o3=pard.inc
$offEcho

$call =xls2gms @book3a.txt

내가 설정 /
$include seti.inc
/;

j / 설정
$include setj.inc
/;

테이블 d(i,j)
$include pard.inc
;

i, j, d를 표시합니다.

$onecho 명령문에 의해 생성된 명령 파일은 다음과 같습니다:

i=E:\wtools\ver000\examples\book3.슬롯
r1=a3:a4
o1=seti.inc
r2=b2:d2
o2=setj.inc
s2=","
r3=a2:d4
o3=pard.inc

다차원 매개변수

데이터 테이블을 고려해보세요:

이 스프레드시트에서 처음 두 열은 색인 열입니다. 이 유효한 GAMS 구문을 만들려면 색인 요소 사이에 점을 삽입해야 합니다. 간단한 방법은 각 셀에 점이 있는 (좁은) 열을 삽입하는 것입니다. 이 방법으로 이 테이블을 다음과 같이 가져올 수 있습니다.

설정
   l '가축 종류' / 양, 염소, 앙고라, 소, 버팔로, 노새, 가금류 /
   cl 'livestk comm' / 고기, 우유, 양모, 가죽, 계란 /
   ty '기간 - 연도' / 1974*1979 /;

$onEcho > 항복.txt
I="%system.fp%yield.슬롯"
R=데이터!B2:J23
O=yield.inc
$offEcho

$call =xls2gms @yield.txt

테이블 Yieldtl(l,cl,ty) '가축 "수율" 시계열(두당 kg)'
$include Yield.inc
;

생산량을 표시합니다;

대화형 사용

명령줄 매개변수 없이 도구를 호출하면 대화형으로 시작됩니다. 이 방법을 사용하면 내장된 대화형 환경을 통해 스프레드시트 파일(.슬롯 파일), 범위 및 최종 대상 파일(GAMS 포함 파일)을 지정할 수 있습니다. 기본 화면에는 아래에 설명된 여러 버튼과 편집 상자가 포함되어 있습니다.

  • 입력 파일(*.슬롯). 입력파일을 지정하는 콤보박스입니다. 파일은 유효한 MS Excel 스프레드시트 파일(*.슬롯)이어야 합니다. 찾아보기 버튼을 사용하면 파일을 더 쉽게 지정할 수 있는 파일 열기 대화 상자를 시작할 수 있습니다. 파일은 표기법을 사용하여 원격 시스템에 있을 수 있습니다.\machine\directory\file.슬롯.
  • 슬롯. 슬롯를 비워 둘 수 있으며, 이 경우 첫 번째 시트 전체가 사용됩니다. 그렇지 않은 경우 슬롯는 단일 셀(예: A1), 블록(예: B2:J23) 또는 시트 내의 영역(예: Sheet1!A1:C10)일 수 있습니다. 스프레드시트에 명명된 슬롯가 포함된 경우 슬롯는 이름이 될 수도 있습니다. 찾아보기 버튼을 누르면 Excel이 시작되어 대화형으로 슬롯를 선택할 수 있습니다.
  • GAMS 포함 파일 출력(*.INC). GAMS 포함 파일을 생성하려면 여기에서 대상 파일을 지정하세요. 포함 파일은 $include 명령을 사용하여 GAMS에서 읽을 수 있는 ASCII 파일입니다. 포함 파일이 이미 존재하는 경우 덮어쓰게 됩니다.
  • 진행 메모. 이 메모 필드는 응용 프로그램의 진행 상황을 표시하는 데 사용됩니다. 또한 데이터베이스의 오류 메시지도 여기에 인쇄됩니다. 읽기 전용 필드입니다.
  • 위의 편집 상자에는 이전에 사용된 파일 이름과 쿼리에 빠르게 액세스하는 데 사용할 수 있는 드롭다운 목록이 있습니다(이전 세션에서도).
  • 옵션 버튼다양한 옵션을 지정할 수 있는 창이 팝업됩니다.
  • 도움말 버튼이 도움말을 표시합니다.
  • 확인 버튼을 누르면 쿼리가 실행되고 포함 파일이 생성됩니다.
  • 일괄 버튼현재 추출 명령을 배치 환경의 GAMS에서 직접 실행할 수 있는 방법에 대한 정보를 제공합니다. 일괄 호출이 표시되며 클립보드에 복사할 수 있습니다. GAMS Studio에서 Ctrl-C를 누르거나 편집|붙여넣기를 선택하여 클립보드의 내용을 GAMS 텍스트 파일에 복사합니다.
  • 닫기 버튼응용프로그램을 종료합니다. 현재 설정은 INI 파일에 저장되므로 XLS2GMS를 다시 실행하면 모든 현재 설정이 복원됩니다.

옵션

옵션옵션 버튼을 눌러 창을 만들 수 있습니다:

옵션 창에서는 다음 옵션을 사용할 수 있습니다:

  • 인용 공백:공백이나 삽입된 따옴표가 포함된 경우 따옴표 문자열입니다. 문자열에 공백이나 포함된 따옴표가 없으면 따옴표가 없는 상태로 유지됩니다. 문자열에 작은따옴표가 포함되어 있으면 적용되는 따옴표는 큰따옴표가 되고, 문자열에 이미 큰따옴표가 포함되어 있으면 주변 따옴표는 작은따옴표가 됩니다. (특수한 경우 문자열에 두 가지가 모두 포함되어 있으면 큰따옴표가 작은따옴표로 대체됩니다.) 자세한 내용은 이 예를 참조하세요.
  • 음소거:포함 파일에 추가 정보 텍스트(예: 사용된 쿼리 등)를 포함하지 마십시오.
  • 목록 없음:포함 파일을 다음으로 묶습니다.$offlisting그리고$onlisting그러면 데이터가 목록 파일에 반영되지 않습니다. 이는 목록 파일이 너무 커서 편안하게 처리할 수 없는 매우 큰 데이터 파일에 유용할 수 있습니다.
  • 구분자.이 옵션을 사용하면 셀 항목 사이에 기록될 구분 문자열을 설정할 수 있습니다. 기본적으로 이는 공백입니다. 어떤 경우에는 이것을 쉼표로 만드는 것이 유용할 수 있습니다. 보다이것이 세트를 가져오는 데 사용되는 예입니다. 참고: 이 옵션을 빈 문자열로 설정하면 결과가 GAMS에 대해 구문적으로 올바르지 않을 수 있습니다. 단일 공백과 빈 문자열 사이의 차이를 확인하기 어렵기 때문에 사용자 인터페이스는 이러한 경우에 대한 피드백을 제공합니다. 빈 문자열을 사용하면 포함 파일에 경고가 기록됩니다.
  • 슬롯 구분자.여러 슬롯는 슬롯 구분 기호로 구분할 수 있습니다. 기본적으로 이는 세미콜론입니다. 미국 이외의 특정 로케일이 사용되는 경우 세미콜론은 다중 영역 슬롯에서 사용할 수 있는 목록 구분 기호입니다. 이러한 충돌이 발생하는 경우 슬롯 구분 기호를 변경할 수 있습니다.
  • 추가합니다.출력 파일에 추가합니다.
  • 읽기 전용 탐색.슬롯 찾아보기 버튼을 누르면 Excel을 실행하고 현재 지정된 입력 파일을 로드하려고 시도합니다. 이 옵션을 선택하면 입력 파일이 읽기 전용으로 로드됩니다. 이 옵션을 체크하지 않으면 파일이 정상적으로 로드되는데, 이 경우에는 변경하여 저장할 수 있습니다.

버튼에는 분명한 기능이 있습니다:

  • 확인 버튼변경사항을 수락합니다.
  • 취소 버튼변경 사항을 무시하고 모든 옵션 설정이 이전 값으로 되돌아갑니다.
  • 도움말 버튼이 도움말 텍스트를 표시합니다.

일괄 사용

전화할 때XLS2GMSGAMS에서 직접 명령줄이나 명령 파일에서 모든 명령과 옵션을 직접 지정하려고 합니다. 예는 다음과 같습니다:

C:\tmp>xls2gms "I=c:\내 문서\test.슬롯" O=test.inc

이 호출은 사용자 개입 없이 작업을 수행합니다. 배치 기능은 GAMS 모델 내부에서 사용할 수 있습니다. 예:

테이블 c(i,j) '스프레드시트의 데이터' /
$call =xls2gms I=C:\tmp\test.슬롯 O=C:\tmp\data.inc R=B1:E10
$include C:\tmp\data.inc
/;

$call 문오류가 발생하기 쉬우므로 정확하고 안정적인 호출을 얻으려면 약간의 시간이 필요합니다.

가능한 모든 명령줄 옵션은 명령줄 인수 섹션에 나열되어 있습니다. 적절한 일괄 호출에는 최소한 다음 명령줄 매개변수가 포함됩니다.

  1. I=입력파일이름
  2. O=출력포함파일

만 지정하는 경우I=입력파일이름그런 다음 대화형 사용자 인터페이스는 명령줄 인수에 제공된 이름과 동일한 입력 파일 이름 편집 상자의 초기 설정으로 시작됩니다. 입력 파일과 출력 파일이 제공되는 경우에만 호출이 일괄 호출로 간주됩니다.

명령줄 인수

인수설명
I=입력파일이 옵션은 필수이며 Access 데이터베이스가 포함된 .슬롯 파일의 이름을 지정합니다. 파일에 공백이 포함된 경우 이름을 큰따옴표로 묶어야 합니다. Access에서 어떤 파일을 열지 혼동하지 않도록 절대 경로를 사용하는 것이 좋습니다. 경로 없이 파일명만 사용하는 경우 현재 디렉터리(GAMS Studio에서 실행 시 프로젝트 디렉터리)에서 파일을 검색합니다. 네트워크에서는 UNC 이름을 사용할 수 있으며 다른 컴퓨터의 파일에 액세스할 수 있습니다."\\호스트 이름\c\내 문서\a.슬롯."이 옵션은 일괄 처리에 필요합니다.
O=출력포함파일옵션은 출력 파일의 이름을 지정합니다. 출력 파일의 형식은 매개변수 명령문에 대한 GAMS 포함 파일입니다. 디렉토리가 쓰기 가능한지 확인하십시오. UNC 이름을 사용할 수 있습니다. 일괄 작업을 위해서는 출력 파일을 지정해야 합니다.
R=슬롯슬롯는 선택적 인수입니다. 지정하지 않으면 첫 번째 시트 전체가 사용됩니다. 그렇지 않은 경우 슬롯는 단일 셀(예: A1), 블록(예: B2:J23) 또는 시트 내의 영역(예: Sheet1!A1:C10)일 수 있습니다. 전체 시트를 지정하려면 Sheet2!를 사용하세요. 스프레드시트에 명명된 슬롯가 포함된 경우 슬롯는 이름이 될 수도 있습니다. 전역 이름(예: R=rangename)과 시트 특정 슬롯 이름(예: R=Sheet2!rangename)이 모두 인식됩니다.
한 번에 여러 슬롯를 선택하려면 다음과 같이 지정할 수 있습니다: R=range1;range2;range3. 이는 xls2gms의 세 가지 개별 호출에 대한 간략한 설명일 뿐입니다. 다중 영역 슬롯는 R=area1,area2,area3으로 지정할 수 있습니다. 내보내기 전에 영역 통합으로 구성된 새 슬롯가 생성됩니다. 이는 테이블에서 특정 행이나 열을 삭제하는 데 사용할 수 있습니다.
D디버그. 이 옵션은 디버깅 목적으로 사용될 수 있습니다. 지정된 경우 가져오기 필터는 최소화되지 않고 "복원"됩니다. 즉, 일반 창으로 실행됩니다. 또한 사용자가 닫기 버튼을 클릭할 때까지 프로그램은 종료되지 않습니다. 이를 통해 실행 중에 발생할 수 있는 오류를 모니터링할 수 있습니다.XLS2GMS.
B이 매개변수가 지정되면 공백이 있는 문자열은 인용됩니다. 문자열이 이미 인용되어 있으면 이 단계는 수행되지 않습니다. 이름에 작은따옴표가 포함되어 있으면 주변 따옴표는 큰따옴표가 됩니다. 이름에 이미 큰따옴표가 포함되어 있으면 주변 따옴표는 작은따옴표가 됩니다. 문자열에 작은따옴표와 큰따옴표가 모두 있으면 모든 큰따옴표가 작은따옴표로 바뀌고 주변 따옴표는 큰따옴표가 됩니다. 기본적으로 이 옵션은 꺼져 있습니다.
M일반 또는 음소거 모드로 실행: 버전 번호 등과 같은 추가 정보가 목록 파일에 기록되지 않습니다.
L$offlisting, $onlisting에 데이터를 삽입합니다. 목록 파일의 크기를 줄이는 빠른 방법입니다.
@파일이름
@"파일 이름"
프로그램이 파일에서 옵션을 읽도록 합니다. 파일 이름에 공백이 포함된 경우 큰따옴표로 묶을 수 있습니다. 옵션 파일에는 명령줄에 지정된 것과 동일한 구문으로 한 줄에 하나의 옵션이 포함되어 있습니다.
N=ini파일이름표준과 다른 Inifile 사용xls2gms.ini실행 파일과 동일한 디렉토리에 위치xls2gms.exe.
A출력 파일을 덮어쓰는 대신 출력 파일에 추가합니다.
G="x"슬롯 구분 기호를 설정합니다
S="x"출력 구분 기호 설정

다음의 호출로XLS2GMS상당히 비용이 많이 드는 경우(Excel 복사본이 시작됨) 관련 호출을 최적화하는 방법이 있습니다. 버전 1.4부터 xls2gms를 사용하면 여러 슬롯를 읽을 수 있고 여러 포함 파일을 한 번에 쓸 수 있습니다. 구문은 예시를 보여줌으로써 가장 잘 설명됩니다.

$call =xls2gms I=c:\tmp\x.슬롯 R1=범위1 R1=범위2 R2=범위3 O1=c:\tmp\f1.inc O2=c:\tmp\f2.inc

이 예에서 'range1'과 'range2' 슬롯는 'f1.inc' 파일에 기록되는 반면 'range3' 슬롯는 'f2.inc' 파일에 기록됩니다. 일반적으로 Rn으로 지정된 슬롯는 On으로 지정된 파일에 기록됩니다. 여러 슬롯가 지정되면 출력 파일에 순차적으로 기록됩니다.

$call =xls2gms I=c:\tmp\x.슬롯 R=범위1 R=범위2 O=c:\tmp\f1.inc

이 예에서는 'range1'과 'range2' 슬롯가 'f1.inc'에 기록됩니다.

$CALL 명령

$call47432_47521

$외부 프로그램 호출
$call =외부 프로그램

앞에 '='가 없는 버전은 명령 프로세서(command.com 또는 cmd.exe)를 통해 외부를 호출합니다. '='가 있는 두 번째 버전은 명령 프로세서를 우회하고 외부 프로그램을 직접 실행합니다. 몇 가지 차이점을 언급하겠습니다.

  • 일부 명령은 외부 프로그램이 아니라 명령 프로세서의 내장 명령입니다. 예를 들면 COPY, DIR, DEL, ERASE, CD, MKDIR, MD, REN, TYPE입니다.
  • 이 명령을 실행하려면 다음 양식을 사용해야 합니다$외부 프로그램 호출명령 프로세서를 사용합니다. 배치 파일(.bat 또는 .cmd 파일)을 실행하려면 다음 양식을 사용해야 합니다.$외부 프로그램 호출.
  • 외부 프로그램이 존재하지 않는 경우 적절한 오류 메시지로 중지하는 것이 중요하다면 다음 양식만 사용하십시오.$call =외부 프로그램. 이 점에서 다른 형식은 신뢰할 수 없습니다. 이는 놀라운 결과로 이어질 수 있으며 상황을 디버깅하기 어려운 경우가 많으므로 일반적으로 다음 형식을 사용하는 것이 좋습니다.$call =외부 프로그램.
  • 순수한 Windows 프로그램을 호출할 때 두 번째 형식을 호출하는 것이 중요합니다. 첫 번째 양식은 외부 Windows 프로그램이 완료될 때까지 기다리지 않습니다. Windows 프로그램 호출 시 명령 프로세서를 사용하는 것이 중요한 경우 다음과 같이 START 명령을 사용하십시오.$call 시작 /w externalwindowsprogram. 그렇지 않으면 다음을 사용하는 것이 좋습니다.$call =externalwindowsprogram.
주의
일반적으로 다음을 사용하는 것이 좋습니다.$call =외부 프로그램더 나은 오류 처리를 위한 버전입니다.

명령줄 인수를 외부 프로그램에 전달해야 하는 경우 공백으로 구분하여 줄에 추가할 수 있습니다.

$call 외부 프로그램 매개변수1 매개변수2
$call =외부 프로그램 매개변수1 매개변수2

명령줄의 총 길이는 255자를 초과할 수 없습니다. 프로그램 이름이나 매개변수에 공백이나 따옴표가 포함되어 있으면 이를 인용해야 합니다. 작은따옴표나 큰따옴표를 사용할 수 있습니다. 일반적으로 다음 구문이 작동합니다.

$call '"외부 프로그램" "매개변수 1" "매개변수 2"'
$call ="외부 프로그램" "매개변수 1" "매개변수 2"

첫 번째 양식에서는 GAMS의 $call 구문 분석 버그로 인해 전체 명령줄 주위에 추가 따옴표가 필요하다는 점에 주목합니다. 두 번째 양식은 추가 따옴표 없이 작동합니다.만약=는 큰따옴표 밖에 표시됩니다.

명령 파일

매개변수는 명령 파일에서 지정할 수 있습니다. 명령줄 길이가 255자를 초과하는 경우 이는 중요합니다. 이는 GAMS가 명령줄에 허용하는 길이에 대한 엄격한 제한입니다. 다음과 같이 긴 명령줄을 지정하는 대신:

$call =xls2gms I="c:\My Documents\test.슬롯" O="c:\My Documents\data.inc" R="Sheet2!A1:F15"

다음과 같은 명령줄을 사용할 수 있습니다:

$call =xls2gms @"c:\내 문서\options.txt"

명령 파일c:\내 문서\options.txt다음과 같이 보일 수 있습니다:

I=c:\내 문서\test.슬롯
O=c:\내 문서\data.inc
R=시트2!A1:F15

$echo 명령을 사용하여 GAMS 모델 내부에서 명령 파일을 쓰는 것이 가능합니다. 다음 예에서는 이를 보여줍니다.

$set cmdfile "trnsport.txt"
$echo "I=trnsport.슬롯" > "%cmdfile%"
$echo "O=trnsport.inc" >> "%cmdfile%"
$call =xls2gms @"%cmdfile%"

$include trnsport.inc

GAMS의 최신 버전에서는 다음이 허용됩니다:

$set cmdfile trnsport.txt
$onEcho > "%cmdfile%"
나=trnsport.슬롯
O=trnsport.inc
$offEcho
$call =xls2gms @"%cmdfile%"

$include trnsport.inc

다중 영역 슬롯 및 후처리

다음 조각은 유네스코의 스프레드시트에서 가져온 것입니다:

알제리부터 콩고까지의 국가에 대한 경상 지출의 1990% 분포를 추출한다고 가정합니다. 선택하는 슬롯는 연속된 영역이 아니고 여러 개의 조각으로 구성되어 있습니다. Excel에서는 마우스와 Ctrl 키를 사용하여 다중 선택을 할 수 있습니다.

슬롯는A10,E10:G10,A14:A19,E14:G19,A21:A26,E21:G26,여기서 쉼표는 슬롯가 다중 영역 슬롯임을 나타냅니다. 이 경우에는 6개의 조각이 있습니다. Excel에서는 조각들의 결합이 직사각형 영역을 형성한다는 것을 이해하는 것이 중요합니다. 그렇지 않은 경우 오류가 발생합니다. (다중 영역 슬롯를 선택하고 새 시트에 복사하여 직접 확인할 수 있습니다. 영역이 함께 직사각형을 형성하지 않으면 이 작업이 실패합니다.)

추출된 텍스트 파일은 다음과 같습니다:

* ----------------------------------------
* XLS2GMS 버전 2.3, 2004년 3월
* Erwin Kalvelagen, GAMS 개발 회사
* ----------------------------------------
* 응용 프로그램: 마이크로소프트 엑셀
* 버전: 9.0
* 워크북: D:\gams projects\xls2gms\ver2.0\unesco.슬롯
* 시트: 시트1
* 범위: $A$10,$E$10:$G$10,$A$14:$A$19,$E$14:$G$19,$A$21:$A$26,$E$21:$G$26
* ----------------------------------------
                          프림. 비서. 터트.
알제리 ... ... ...
앙골라 96.3 ./.  3.7
베냉 ... ... ...
보츠와나 31.1 48.8 12.2
'부르키나파소' 41.7 25.8 32.1
부룬디 46.8 29.1 22
카메룬 70.5 ./.  29.5
'카보베르데' 54.7 17.5 2.7
'중앙아프리카공화국' 52.7 14.6 21.5
차드 47.1 20.9 8.2
코모로 42.4 28.2 17.3
콩고 ... ... ...
* -------------------------------------------

이 파일은 GAMS 모델에서 사용하기에 완전히 적합하지 않습니다. 다음과 같이 편집해야 합니다.

  1. 헤더 라벨은 뒤에 오는 점을 제거해야 합니다.
  2. ...이 있는 셀은 공백으로 대체되어야 합니다.
  3. ./.이 있는 셀 공백으로 대체되어야 함

GAMS 배포판의 하위 디렉토리gbin흥미로운 Unix 유틸리티가 많이 포함되어 있습니다. 이들 중 일부는 다음과 같은 텍스트 파일에서 문자열 처리를 수행하는 데 매우 적합합니다.sed그리고awk. 이 경우 일부 대체 명령과 함께 sed를 사용할 수 있습니다.

명령설명
s/prim\./prim / "프림"을 바꾸세요. "프림"으로. 테이블 정렬을 올바르게 유지하도록 주의해야 하므로 점을 단순히 제거하는 대신 점을 공백으로 교체합니다. 점은 sed에서 특수 문자("모든 문자"를 의미)이므로 "\"를 지정하여 이스케이프 처리합니다.
초/초\./초 / "초"를 교체하세요. "초"로.
s/Tert\./tert / "Tert"를 바꾸세요. 작성자: "tert".
s/\.\.\./ /g "..."를 " "로 바꾸세요. 점이 이스케이프됩니다. 한 줄에 교체해야 하는 인스턴스가 여러 개 있을 수 있음을 나타내기 위해 g를 추가합니다.
s/\.\/\./ /g "./." 교체 에 의해 " ". 점과 '/'를 모두 이스케이프 처리해야 합니다.

완전한 GAMS 공식은 다음과 같습니다:

$onText
새 버전 XLS2GMS 버전 2.1에서 처리 가능
다중 영역 범위.
$offText

세트
   c '국가'
       / 알제리, 앙골라, 베냉, 보츠와나, '부르키나파소', 부룬디, 카메룬
        '카보베르데', '중앙아프리카공화국', 차드, 코모로, 콩고 /
   exp '현재 지출의 백분율 분포'
       / 프림, 초, tert /;

$onEcho > 명령.txt
나=%system.fp%unesco.슬롯
R=A10,E10:G10,A14:A19,E14:G19
O=unesco.inc
비
$offEcho

$call =xls2gms @commands.txt

$onEcho > sedcommands.txt
s/prim\./prim /
초/초\./초 /
s/Tert\./tert /
s/\.\.\./ /g
s/\.\/\./ /g
$offEcho

$call sed.exe -f sedcommands.txt unesco.inc > unescox.inc

테이블 분포(c,exp)
$include unescox.inc
;

디스플레이 distr;