Prev: Problem with ALLOCATABLE scalar
Next: Questions on reuse of FORMAT statements and newer I/O options such as ACCESS='STREAM'
From: Richard Maine on 28 Dec 2009 00:55 John <urbanjost(a)comcast.net> wrote: > Anyhow, the result is we are having a local difference of opinion on > when to expect a newline to be generated when re-using a format when a > single non-advancing I/O and/or implied DO's write statement > "exhausts" > the format; ESPECIALLY if formatted stream I/O is used (in particular, > should a WRITE(IO,*) be equivalent to calling the NEW_LINE() function > when writing to a stream?). First, it makes no difference whether you are using stream or not. You won't find a hint of any such difference anywhere in the standard. Stream doesn't even change the default for the advance specifier. See 9.5.1.3 (ADVANCE= specifier in a data transfer statement) in F2003. The last sentence is "If this specifier is omitted from an input/output statement that allows the specifier, the default is YES." Note that there are no conditions relating to stream versus sequential. The default is just YES. The condition about statements that allow the specifier is for things like internal I/O. Second, even if one explicitly specifies ADVANCE='no', that has no effect on reversion of format. Advancing versus non-advancing I/O affects only whether the record is terminated at the end of the output statement. It has no effect on new records arising from explicit "/" edit descriptors or reversion of format (or from writing newline characters in stream output). See the 3rd para after Note 10.5 in F2003. That's the para that describes format reversion. Skipping over the bits that describe when reversion happens and how it interacts with I/O list elements, we find ".. the file is positioned in a manner identical to the way it is positioned what a slash edit descriptor is procesed..." Note there are no conditions relating to advance='no, stream access, or anything of the sort. It just has the effect of a slash. Look in the section about slash. That would be 10.7.2. Not only doesn't it exclude stream I/O, it specifically includes it. "On output to a file connected for sequential or stream acess, a new empty record is created following the current record." I don't see how one could plausibly misread this stuff. Now if one were to try to just guess the behavior, or possibly extrapolate from nonstandard extensions to f77, one might come to different conclusions. But I don't see much wiggle room on this in the standard. Do note that there is a difference between format reversion (what you are calling reuse) and just comming to the end of the i/o list. Format reversion always causes a new record; there are no exceptions. Comming to the end of the i/o list causes a new record depending on the setting of advance (which does not depend on stream versus sequential). -- Richard Maine | Good judgment comes from experience; email: last name at domain . net | experience comes from bad judgment. domain: summertriangle | -- Mark Twain |