无法检测文件是否存在

时间:2017-01-09 21:16:43

标签: fortran intel-fortran

在我正在改进的程序中,我注意到Fortran没有检测到文件是否存在。这导致了一个尚未修复的逻辑错误。如果您能指出问题或错误并给我更正,我深表感谢。

SELECT PAGE, COUNT( * ) AS poso,
       (SUM(DATE(TIMESTAMP) = CURDATE()) - 
        SUM(DATE(TIMESTAMP) = DATE_SUB(CURDATE( ), INTERVAL 1 
DAY))
       ) diff
FROM  `behaviour` 
WHERE DATE( TIMESTAMP ) >= DATE_SUB( CURDATE( ) , INTERVAL 1 
DAY ) 
GROUP BY PAGE;

1 个答案:

答案 0 :(得分:2)

这里有两个不同的问题。让我们分别看看它们。

首先,考虑

net.ucanaccess.jdbc.UcanaccessSQLException: UCAExc:::3.0.7 expression not in aggregate or 
GROUP BY columns: GROUPBY.TOTALFEET

评论表明open(unit=nhist,file=history,iostat=ierr) 始终设置为零。那么,为什么不应该将其设置为零?如果出现错误,ierr应为非零,但文件是否存在错误?

不一定。如果没有ierr说明符,则会采用默认status=。如果文件不存在,编译器不必(并且不太可能)在这种情况下将打开视为错误。它可能会在写入时根据需要创建它,或者在尝试阅读时抱怨。

status='unknown'添加到status='old'语句是通常的说法"文件应该存在"。

其次,考虑

open

如果此处出现错误,执行将转移到标有 open(unit=nhist,file=history,err=700) 700 ierr=-1 if (ierr /=0) then ... 的语句。从此语句700设置为非零值,然后我们转到ierr构造来处理该错误。

只是标有if的声明也恰好在没有错误的情况下执行:它只是700之后的下一个声明没有分支错过它。 [我可以举一个这样的分支的例子,但我不想鼓励在现代代码中使用open。有了工作err=,事情就更好了。]

但是如果您只想测试文件的存在,请考虑按文件查询:

iostat=

有人会认为这比在logical itexists inquire (file=history, exist=itexists) if (.not.itexists) error stop "No file :(" 声明中使用status='old'更好。