主题:SYSTEMQQ
youyou0507
[专家分:90] 发布于 2012-01-12 17:25:00
请问 SYSTEMQQ函数在Ivf 和Cvf里使用方法不同吗?
我在cvf下使用不出错,但在Ivf里面就报错:错误
error #6552: The CALL statement is invoking a function subprogram as a subroutine. [SYSTEMQQ]
回复列表 (共5个回复)
沙发
臭石头雪球 [专家分:23030] 发布于 2012-01-13 08:44:00
call systemqq
不对
应该是
返回值 = systemqq
这样。
在 CVF 下和 IVF 都一样,只不过 CVF 允许放弃返回值,当做 call,而 IVF 不允许。
板凳
youyou0507 [专家分:90] 发布于 2012-01-13 11:05:00
果然是
3 楼
youyou0507 [专家分:90] 发布于 2012-01-13 11:08:00
请问下怎么用SYSTEMQQ查询某一类型如.dat文件的个数
4 楼
臭石头雪球 [专家分:23030] 发布于 2012-01-13 13:43:00
我没用 SystemQQ 实现过这个功能。
不知道能否做到,请其他学兄回答吧。
我是用自己写的另一个函数实现,需要在 VF 系列编译器上编译,其他编译器不保证能正常编译和使用。
[quote]
Program Main
Implicit None
integer N
Call DoWithWildcard( '*.dat' , N )[color=red] !//此处修改通配符[/color]
write(*,*) '共有',N,'个dat文件!'
contains
Subroutine DoWithWildcard(cWildcard,iTotal,callback)
!// 通配符循环程序 DoWithWildcard
!// 在 Windows 编译器 Visual Fortran 系列上通过编译
!// 臭石头雪球 2007 年 www.pfan.cn
Use IFPort , only : GetFileInfoQQ , GetLastErrorQQ , FILE$INFO , FILE$LAST , FILE$ERROR , FILE$FIRST , ERR$NOMEM , ERR$NOENT , FILE$DIR
[color=red]!//此处可能是 Use DFPort 或其他,视不同编译器而不同[/color]
Implicit None
optional callback
Interface
Subroutine callback( cFile , iLoop )
Character( Len = * ) , Intent( IN ) :: cFile
Integer , Intent( IN ) :: iLoop
End Subroutine callback
End Interface
Character( Len = * ) , Intent( IN ) :: cWildcard
Integer , Intent( OUT ) :: iTotal
Type (FILE$INFO) :: stInfo
Integer(4) :: iWildhandle , iLength
iWildhandle = FILE$FIRST
iTotal = 0
Do While (.TRUE.)
iLength = GetFileInfoQQ( cWildCard , stInfo , iWildhandle )
If (( iWildhandle == FILE$LAST) .OR.( iWildhandle == FILE$ERROR )) then
Select Case (GetLastErrorQQ())
Case (ERR$NOMEM)
iTotal = - 1
return
Case (ERR$NOENT)
return
Case Default
iTotal = 0
return
End Select
End If
If ( (stInfo%permit.AND.FILE$DIR) == 0 ) then
If ( present(callback) ) call callback( Trim(stInfo%Name) , iTotal + 1 )
iTotal = iTotal + 1
End If
End Do
End Subroutine DoWithWildcard
End Program Main
[/quote]
5 楼
youyou0507 [专家分:90] 发布于 2012-01-15 10:44:00
谢谢,你的函数在IVF11可以用
我来回复