【发布时间】:2021-02-05 13:51:12
【问题描述】:
在 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'
【问题讨论】:
-
只是猜测,但对于执行该调用的 shell,
tr ; ,与命令tr后跟命令,相同,因为;是命令分隔符。尝试tr \; , <file.csv > file_temp.csv或tr ';' , <file.csv > file_temp.csv来避免此问题。 -
@MemReflect 感谢您的评论!我现在试过了,但没有用。正如我所写,文件 'file_temp.csv' 有逗号而不是分号作为分隔符,所以翻译似乎有效,但 GAMS 不理解逗号作为分隔符,虽然它应该...
-
由于我从未使用过 GAMS,我唯一的另一个想法是您的 Set 中缺少
row4和row5(或 CSV 文件中缺少row2)可能是个问题。也许熟悉该软件的人可以提供更多帮助。