Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.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编写格式化的UTF-8文本文件_Fortran_Text Files - Fatal编程技术网

用fortran编写格式化的UTF-8文本文件

用fortran编写格式化的UTF-8文本文件,fortran,text-files,Fortran,Text Files,我正试图从fortran写一个文本文件 我编写了这个简短的测试程序,但它当然不起作用,因为它不会创建可读的文本文件: PROGRAM teste INTEGER(4) REC2,RECL1 character(20) :: charI, wanted RECL1=10 DO REC2=1,10 OPEN(1,FILE='teste.txt',ACCESS="direct",RECL=RECL1); write (charI, "(A5,I4)") "hello", REC2

我正试图从fortran写一个文本文件

我编写了这个简短的测试程序,但它当然不起作用,因为它不会创建可读的文本文件:

PROGRAM teste

 INTEGER(4) REC2,RECL1
 character(20) :: charI, wanted
 RECL1=10
 DO REC2=1,10
  OPEN(1,FILE='teste.txt',ACCESS="direct",RECL=RECL1);
  write (charI, "(A5,I4)") "hello", REC2
  wanted=trim(charI)
  write(1,REC=REC2) wanted
  close(1)
 END DO


END PROGRAM teste
我读了很多不同的东西,但仍然不清楚应该怎么写

我需要在写之前转换成字符串吗?如果是,为什么

试试这个

PROGRAM test

  IMPLICIT NONE

  INTEGER, PARAMETER :: ascii = selected_char_KIND ("ascii")
  INTEGER, PARAMETER :: ucs4  = selected_char_KIND ('ISO_10646')   
  INTEGER :: ix
  CHARACTER(len=5,kind=ucs4) :: greeting = ucs4_"hello"

  OPEN(10,FILE='test.txt')    
  DO ix=1,10
     WRITE (10,'(A5,I4)') greeting, ix
  END DO
  CLOSE(10)

END PROGRAM test
。。。评论

PROGRAM test

  IMPLICIT NONE
所有好的Fortran程序都包括行
隐式none
;原因在101 Qs和这里的堆栈溢出中解释过,我在这里不再重复

  INTEGER, PARAMETER :: ascii = selected_char_KIND ("ascii")
  INTEGER, PARAMETER :: ucs4  = selected_char_KIND ('ISO_10646')  
最新的Fortran标准要求编译器提供这两种类型的字符。老实说,我不确定iso_10646是否与UTF-8相同,但如果不是,你可能运气不好。这里,我定义了两个参数,用于识别稍后在程序中使用的字符类型。出于您的目的,这些参数中的第一个是不必要的,但您也应该了解它

我想您的编译器可能支持其他字符类型,请阅读文档

  INTEGER :: ix
  CHARACTER(len=5,kind=ucs4) :: greeting = ucs4_"hello"
(旁白:从技术上讲,还有第三个字符种类名称,
default
。这可能会将字符种类设置为
ascii
iso10646
,最有可能是前者,但如果这对您很重要,请查看编译器文档。)

在第二行中,我用文本
hello
定义了一个字符变量,属于
ucs4
(如上所述,它是
iso_10646
的本地代码)。如果没有前缀
ucs4
,字符串
hello
将被解释为
default
类型,然后在存储到变量
greeting
时转换为
ucs4
。在这种情况下,如果
ascii
ucs4
中的字符(表示形式)之间存在1:1的映射,则前缀完全不需要,但在其他情况下则不需要

  OPEN(10,FILE='test.txt')    
  DO ix=1,10
     WRITE (10,'(A5,I4)') greeting, ix
  END DO
  CLOSE(10)
我已经删除了所有关于直接访问和写入文件中特定记录的废话。对于你眼前的需要来说,这些都是不必要的。因此,此循环将向文件
test.txt
中写入
greeting
(即ucs4字符串
hello
)和行索引10次

END PROGRAM test
试试这个

PROGRAM test

  IMPLICIT NONE

  INTEGER, PARAMETER :: ascii = selected_char_KIND ("ascii")
  INTEGER, PARAMETER :: ucs4  = selected_char_KIND ('ISO_10646')   
  INTEGER :: ix
  CHARACTER(len=5,kind=ucs4) :: greeting = ucs4_"hello"

  OPEN(10,FILE='test.txt')    
  DO ix=1,10
     WRITE (10,'(A5,I4)') greeting, ix
  END DO
  CLOSE(10)

END PROGRAM test
。。。评论

PROGRAM test

  IMPLICIT NONE
所有好的Fortran程序都包括行
隐式none
;原因在101 Qs和这里的堆栈溢出中解释过,我在这里不再重复

  INTEGER, PARAMETER :: ascii = selected_char_KIND ("ascii")
  INTEGER, PARAMETER :: ucs4  = selected_char_KIND ('ISO_10646')  
最新的Fortran标准要求编译器提供这两种类型的字符。老实说,我不确定iso_10646是否与UTF-8相同,但如果不是,你可能运气不好。这里,我定义了两个参数,用于识别稍后在程序中使用的字符类型。出于您的目的,这些参数中的第一个是不必要的,但您也应该了解它

我想您的编译器可能支持其他字符类型,请阅读文档

  INTEGER :: ix
  CHARACTER(len=5,kind=ucs4) :: greeting = ucs4_"hello"
(旁白:从技术上讲,还有第三个字符种类名称,
default
。这可能会将字符种类设置为
ascii
iso10646
,最有可能是前者,但如果这对您很重要,请查看编译器文档。)

在第二行中,我用文本
hello
定义了一个字符变量,属于
ucs4
(如上所述,它是
iso_10646
的本地代码)。如果没有前缀
ucs4
则字符串
hello
将被解释为属于类型
default
,然后存储到变量
greeting
时转换为
ucs4
。在这种情况下,如果
ascii
ucs4
中的字符(表示形式)之间存在1:1的映射,则前缀完全不需要,但在其他情况下则不需要

  OPEN(10,FILE='test.txt')    
  DO ix=1,10
     WRITE (10,'(A5,I4)') greeting, ix
  END DO
  CLOSE(10)
我已经删除了所有关于直接访问和写入文件中特定记录的废话。对于你眼前的需要来说,这些都是不必要的。因此,此循环将向文件
test.txt
中写入
greeting
(即ucs4字符串
hello
)和行索引10次

END PROGRAM test

open
语句中,您正在为未格式化的输入/输出打开一个文件。因为您已经指定了
ACCESS=“direct”
默认设置为未格式化,而连接时默认设置为按顺序访问

要使文件“可读”,您需要主动打开以进行格式化访问,并提供写入格式:

open(1,FILE='teste.txt',ACCESS="direct",RECL=RECL1, FORM='formatted')
...
write(1,fmt=...,REC=REC2) ...

open
语句中,您正在为未格式化的输入/输出打开一个文件。因为您已经指定了
ACCESS=“direct”
默认设置为未格式化,而连接时默认设置为按顺序访问

要使文件“可读”,您需要主动打开以进行格式化访问,并提供写入格式:

open(1,FILE='teste.txt',ACCESS="direct",RECL=RECL1, FORM='formatted')
...
write(1,fmt=...,REC=REC2) ...

你说“它不起作用”是什么意思?避免使用这个短语,因为它没有任何用处,也不会说明任何事情。具体点!是的,对不起,你说得对。我的意思是它创建了一个文件,但它并没有创建一个可读的文件,它的格式可以由gedit打开。你说“它不工作”是什么意思?避免使用这个短语,因为它没有任何用处,也不会说明任何事情。具体点!是的,对不起,你说得对。我的意思是它创建了一个文件,但它没有创建一个可读的文件,文件的格式可以由gedit打开。我理解得更好,非常感谢,但是,我仍然有以下错误消息:
GRAVARTXT.f90(8):error#6684:在这种上下文中,这是一个不正确的种类类型参数值。[UCS4]字符(len=5,kind=UCS4)::greeting=UCS4_u“hello”--------------------------^gravarText.f90(8):错误#6684:这是一个不正确的值