Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Fortran 90如何编写不同长度的超长输出行_Fortran_Output_Long Integer_Fortran90 - Fatal编程技术网

Fortran 90如何编写不同长度的超长输出行

Fortran 90如何编写不同长度的超长输出行,fortran,output,long-integer,fortran90,Fortran,Output,Long Integer,Fortran90,我花了几个小时在互联网上搜寻这个问题的解决方案,但什么也找不到。我一直在尝试将未格式化的输出写入CSV输出文件,该文件包含多个长度不等的很长的行和多种数据类型。我试着先写一个长头,指示下面要写的变量,用逗号分隔。然后在下面的几行中,我正在写入标题中指定的值。然而,通过顺序存取,长输出线被分成多个短输出线,这不是我所希望的。我尝试在open语句中使用recl控制行长度,但这只在输出后添加了一堆乱码文本和符号,同样的问题仍然存在。我也尝试使用直接访问,但线路长度不同,因此也不起作用。我读过关于在Fo

我花了几个小时在互联网上搜寻这个问题的解决方案,但什么也找不到。我一直在尝试将未格式化的输出写入CSV输出文件,该文件包含多个长度不等的很长的行和多种数据类型。我试着先写一个长头,指示下面要写的变量,用逗号分隔。然后在下面的几行中,我正在写入标题中指定的值。然而,通过顺序存取,长输出线被分成多个短输出线,这不是我所希望的。我尝试在open语句中使用recl控制行长度,但这只在输出后添加了一堆乱码文本和符号,同样的问题仍然存在。我也尝试使用直接访问,但线路长度不同,因此也不起作用。我读过关于在Fortran2003中使用流I/o的文章,但我使用的是Fortran90,所以这也不起作用。我正在使用Fortran 90和使用FTN95编译器的柏拉图IDE。我包括了一个示例程序,类似于我下面要做的,使用了一个数组和一些伪文本,我还包括了下面说明问题的输出。有人知道我怎么能只写一行语句吗?任何帮助都将不胜感激

module types
  integer, parameter :: dp=selected_real_kind(15)
end module types

program blah
  use types
  use inputoutput

  implicit none

  integer :: i
  character(50)::fileNm
  integer :: unitout2=20
  real(dp), dimension(100) :: bigArray

  fileNm='predictout2.csv'
  open(unit=unitout2,file=fileNm,status="replace")

  do i=1,100
    bigArray(i)=i
  end do

  write(unitout2,*)"word,word,word,word,word,word,word,word,word,word,word,word,word,word,word,word,word,&
  &word,word,word,word,word,word,word,word,word,word,word,word,word,word,word,word,word,word,word,word,&
  &word,word,word,word,word,word,word,word,word,word,word,word,word,word,word,word"
  write(unitout2,*)bigArray

  close(unitout2)

end program
以下是上述程序的输出(无REC):


这不是用于文件(流、顺序或直接)的访问的问题—这是您使用的格式规范的结果

请注意,您并没有进行无格式输出。格式化与未格式化是一个输出是否为人类可读的问题

WRITE语句第二个说明符中的星号是列表定向格式的规范。这意味着用于输出的格式基于要输出的内容列表。除此之外,还有语言中用于列表定向输出的一小组规则,您几乎将事情的外观留给Fortran处理器(编译器)

对于列表导向的格式化输出,处理器特别允许在项目之间插入其认为合适的记录。它在这里这样做是非常合理的,目的是让人们更容易阅读文件

如果希望对输出的外观有更多的控制,请使用显式格式。例如,类似于:

write(unitout2,"(9999(G12.5,:,','))") bigArray
可能更合适


(从技术上讲,打开顺序文件时,不应超过处理器定义的最大记录长度(在没有程序员指定的最大长度的情况下)。实际上,考虑到几乎所有当前Fortran编译器将顺序格式化文件存储在磁盘上的方式,这种技术性不会导致任何问题。)

您可以开始在open(…,recl=9999)中使用“recl”选项。查看更多信息。@IanH-您是否有一个链接,我可以在其中找到格式字符串的解释?
write(unitout2,"(9999(G12.5,:,','))") bigArray