问题描述
在 GAMS 33.2.0 版中,我将 csv 文件“file.csv”中的分号更改为逗号,因为 GAMS 需要逗号作为分隔符。然后我想将 csv 文件的内容传输到 GAMS 中的表中,然后将其保存在 gdx 文件中。当我运行下面的代码时,分号成功地被逗号替换了,但尽管如此,GAMS 还是无法将其列成表格。我收到错误 326:空表语句后面没有合法语句,并且在 csv 文件“file_temp.csv”中遇到第一个逗号时会发生错误。为什么 GAMS 不能将逗号识别为分隔符?
文件“file.csv”包含:
;col1;col2;col3
row1;1;2;3
row5;4;5;6
row3;7;8;9
row4;10;11;12
我的代码是:
Sets
column /col1,col2,col3/
row /row1,row2,row3/;
$onempty
$call "tr ;,<file.csv > file_temp.csv"
Table tab(row,column)
$ondelim
$include file_temp.csv
$offdelim
;
$offempty
execute_unload 'tab.gdx'
解决方法
当我运行您的模型时,我收到域违规错误。问题是,当您的数据中有 row
时,您将 row1,row2,row3
定义为 row5
。扩展 row
集后,事情对我有用:
$onEcho > file.csv
;col1;col2;col3
row1;1;2;3
row5;4;5;6
row3;7;8;9
row4;10;11;12
$offEcho
Sets
column /col1,col2,col3/
row /row1 * row5/;
$onempty
$call "tr ;,<file.csv > file_temp.csv"
Table tab(row,column)
$ondelim
$include file_temp.csv
$offdelim
;
$offempty
execute_unload 'tab.gdx';