【问题标题】:Problem with translating characters with tr (POSIX) in GAMS在 GAMS 中用 tr (POSIX) 翻译字符的问题
【发布时间】: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 \; , &lt;file.csv &gt; file_temp.csvtr ';' , &lt;file.csv &gt; file_temp.csv 来避免此问题。
  • @MemReflect 感谢您的评论!我现在试过了,但没有用。正如我所写,文件 'file_temp.csv' 有逗号而不是分号作为分隔符,所以翻译似乎有效,但 GAMS 不理解逗号作为分隔符,虽然它应该...
  • 由于我从未使用过 GAMS,我唯一的另一个想法是您的 Set 中缺少 row4row5(或 CSV 文件中缺少 row2)可能是个问题。也许熟悉该软件的人可以提供更多帮助。

标签: csv posix gams-math


【解决方案1】:

当我运行您的模型时,我收到了域违规错误。问题是,您将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';

【讨论】:

  • 谢谢,我应该在发帖之前通读我的代码。我的想法只是拥有 row1、row2、row3、row4 但当然我应该将设置的行分配为 /row1、row2、row3 row4/。然而,这不是“空表语句后面没有法律声明”错误的原因,但我发现了问题所在。我希望能够将数据从 Excel 传输到 GAMS,所以,我应该提到的是,我在 Excel 中创建了 file.csv。错误是我以 CSV UTF-8 格式保存它,这似乎让 GAMS 感到困惑。当我保存为 CSV 文件时,它起作用了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-10
  • 1970-01-01
  • 2015-09-04
  • 1970-01-01
相关资源
最近更新 更多