Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit3a0b254

Browse files
committed
Merge branch '93-case-insens-ext' into 'develop'
Resolve "case insensitive file extension"Closes #93See merge request devel/gams-transfer-r!110
2 parentsc19f575 +41ea862 commit3a0b254

File tree

5 files changed

+49
-25
lines changed

5 files changed

+49
-25
lines changed

‎CHANGELOG‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
GAMS Transfer R
2+
=======================
3+
- Removed pre-check for .gdx extension. Now rely on GDX API to validate files, allowing case-insensitive and extension-independent handling.
4+
15
GAMS Transfer R v3.0.5
26
=======================
37
- New GDX API version 7.11.16

‎gamstransfer/R/Container.R‎

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -610,15 +610,24 @@ Container <- R6::R6Class(
610610
}
611611

612612
if (is.character(loadFrom)) {
613-
namesplit<- strsplit(loadFrom,"\\.")
614-
ext<-utils::tail(unlist(namesplit),1)
615-
if (ext!="gdx") {
616-
stop("check filename extension, must be .gdx\n")
617-
}
618613
loadFrom<-R.utils::getAbsolutePath(path.expand(loadFrom))
614+
615+
ext=tools::file_ext(loadFrom)
619616
if (!file.exists(loadFrom)) {
620-
stop(paste0("File",loadFrom," doesn't exist\n"))
617+
if (ext!="") {
618+
stop(paste0("File",loadFrom," doesn't exist\n"))
619+
}
620+
else {
621+
# try if adding .gdx returns in file exists
622+
if (file.exists(paste0(loadFrom,".gdx"))) {
623+
loadFrom= paste0(loadFrom,".gdx")
624+
}
625+
else {
626+
stop(paste0("File",loadFrom," doesn't exist\n"))
627+
}
628+
}
621629
}
630+
622631
private$.gdxRead(loadFrom,symbols,records)
623632
}elseif (inherits(loadFrom,"Container")) {
624633
private$.containerRead(loadFrom,symbols,records)
@@ -1000,12 +1009,6 @@ Container <- R6::R6Class(
10001009
if (!is.character(writeTo)) {
10011010
stop("The argument writeTo must be of type character\n")
10021011
}else {
1003-
namesplit<- strsplit(writeTo,"\\.")
1004-
ext<-utils::tail(unlist(namesplit),1)
1005-
if (ext!="gdx") {
1006-
stop("check filename extension, must be .gdx\n")
1007-
}
1008-
10091012
writeTo<-R.utils::getAbsolutePath(path.expand(writeTo))
10101013
}
10111014

‎gamstransfer/src/Read.cpp‎

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -365,8 +365,12 @@ List CPP_readSuper(Nullable<CharacterVector> symNames_, CharacterVector gdxName,
365365

366366
int err_nr;
367367
gdxobj.gdx.gdxOpenRead(gdx_name.c_str(), err_nr);
368-
if (err_nr)
369-
stop("CPP_readSuper:gdxOpenRead GDX error with error code %i", err_nr);
368+
369+
std::string msg;
370+
if (err_nr) {
371+
gdxobj.gdx.gdxErrorStr(err_nr, msg.data());
372+
stop("CPP_readSuper:gdxOpenRead"s + msg.data() +".");
373+
}
370374

371375
std::array<char, GMS_SSSIZE> Msg {}, Producer {};
372376
gdxobj.gdx.gdxFileVersion(Msg.data(), Producer.data());

‎gamstransfer/src/Write.cpp‎

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -153,17 +153,14 @@ void gt_register_uels(gdx::TGXFileObj & gdx, const CharacterVector & arr, int* u
153153
}
154154

155155
voidgt_open_write(gdx::TGXFileObj & gdx,const std::string & filename,bool compress) {
156-
int rc, err_nr;
157-
if (!compress) {
158-
rc = gdx.gdxOpenWrite(filename.c_str(),"GAMS Transfer", err_nr);
159-
if (!rc)
160-
stop("gt_open_write:gdxOpenWrite Error opening the file %s with error code %i", filename, err_nr);
161-
}
162-
else {
163-
rc = gdx.gdxOpenWriteEx(filename.c_str(),"GAMS Transfer",1, err_nr);
164-
if (!rc)
165-
stop("gt_open_write:gdxOpenWriteEx Error opening the file %s with error code %i", filename, err_nr);
166-
}
156+
int err_nr;
157+
gdx.gdxOpenWriteEx(filename.c_str(),"GAMS Transfer", compress, err_nr);
158+
159+
std::string msg;
160+
if (err_nr) {
161+
gdx.gdxErrorStr(err_nr, msg.data());
162+
stop("gt_open_write:gdxOpenWriteEx"s + msg.data() +".");
163+
}
167164
}
168165

169166
voidgt_register_priority_uels(gdx::TGXFileObj & gdx,const CharacterVector & uel_priority) {

‎gamstransfer/tests/testthat/test-read.R‎

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4764,3 +4764,19 @@ expect_equal(colnames(c["foo"]$records), c("level_1", "level", "marginal", "lowe
47644764
}
47654765
)
47664766

4767+
4768+
# improved file check for read and write
4769+
test_that("test_num_145", {
4770+
m=Container$new()
4771+
m$write("foo_145")# should be accepted without .gdx extension
4772+
c=Container$new("foo_145")# should not throw a warning
4773+
4774+
m$write("foo_1.gdx")
4775+
c=Container$new("foo_1")# should automatically read foo_1.gdx
4776+
4777+
m$write("foo_txt.txt")# should be accepted even with .txt extension
4778+
4779+
c=Container$new()
4780+
expect_error(c$read("nonexistentfile.gdx"))
4781+
}
4782+
)

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp