1

我们不得不将一些旧的 Fortan 77 代码转换为 VB.net。由于我们没有人知道任何 Fortran,因此我们取得了重大进展。但是,我们遇到了下面的 write 语句,它有几个嵌套的隐式 do 循环。我们熟悉隐含的 do 循环,但不知道 MN:MN 中冒号的意义是什么。我们只见过使用逗号的隐含 do 循环,例如 this statement 中的后者(NREC,MN)

Logical*1 DECLN(492)

WRITE(6,9238)NPERMN(NREC),CUSIPS(NREC),TICKRS(NREC),NAMES(NREC),(DECLN(MN:MN),MN=1,30),(SCORES(NREC,MN),MN=1,30))

format(I7, 1X, A8, 1X, A8, 1X, A20, 1X, 12A1, 1X, 12A1, 1X, 6A1/(12F10.5))
4

3 回答 3

4
DECLN(MN:MN)

looks like a 1-character extract from a character variable called DECLN. The expression

(DECLN(MN:MN),MN=1,30)

(which is an io-implied-do expression) causes the program to write the first 30 characters of DECLN as 30 separate characters. The form

(DECLN(1:30))

writes the same characters in one 30-character long go.

It might be that DECLN(MN:MN) is a 1-element section of the rank-1 array DECLN, in which case it's an odd way to write DECLN(MN)

于 2012-08-01T15:13:14.283 回答
2

DECLN(MN:MN) is used to extract a single character from a string.

于 2012-08-01T15:13:32.163 回答
0

如更新中所述,DECLN 不是字符;它是 1 字节的逻辑数组(包含有关证券的信息)。(DECLN(MN:MN),MN=1,30) 正在识别前 30 个元素,但我认为可以更容易地编写 (DECLN(MN),MN=1,30)。CUSIP(这是 9 位代码)被编写为 A8,它会截断校验和(足够典型的程序,我相信 Brian 知道,因为大多数清算机构都忽略了它)

于 2018-06-11T00:10:01.510 回答