Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/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从文件中读取变量_Fortran - Fatal编程技术网

用fortran从文件中读取变量

用fortran从文件中读取变量,fortran,Fortran,我正在使用一个fortran程序,它从一个文件中读取大量数据,然后以不同的格式将其写回 我用来读取数据的代码如下: 10 read(10,*,err=11,end=20) f,time(i),(a(i,j),j=1,14) ... goto 10 11 i=i+1 goto 10 它可以工作,但只有在输入文件正确时才能工作。 但有些台词是这样的: "2014-04-28 07:51:18.9",2705,-8.42144,6.623851,0.4654102,20

我正在使用一个fortran程序,它从一个文件中读取大量数据,然后以不同的格式将其写回

我用来读取数据的代码如下:

10  read(10,*,err=11,end=20) f,time(i),(a(i,j),j=1,14)
    ... 
    goto 10
11  i=i+1
    goto 10
它可以工作,但只有在输入文件正确时才能工作。 但有些台词是这样的:

"2014-04-28 07:51:18.9",2705,-8.42144,6.623851,0.4654102,20.99942,"NAN","NAN",0,0,0,0,-9.0605,5.8855,0.4135,21.39728
当这种情况发生时,我会丢失NAN之后行中的所有值。有没有办法读取其他值

是否可以将每个值读取为字符串,然后将其转换为双精度?
我对fortran知之甚少,需要尽快修复它。用C重写所有内容可能会花费太多时间。

是的,您可以将整行内容读入字符串。然后解析字符串并用一些特殊的数值替换“NAN”,例如一个大的负值。内部函数可以提供帮助,例如,
索引
。然后使用“内部读取”将字符串读取到数值变量中


请参阅:,和

是的,您可以将整行读入字符串。然后解析字符串并用一些特殊的数值替换“NAN”,例如一个大的负值。内部函数可以提供帮助,例如,
索引
。然后使用“内部读取”将字符串读取到数值变量中


请参阅:,和

是的,您可以将整行读入字符串。然后解析字符串并用一些特殊的数值替换“NAN”,例如一个大的负值。内部函数可以提供帮助,例如,
索引
。然后使用“内部读取”将字符串读取到数值变量中


请参阅:,和

是的,您可以将整行读入字符串。然后解析字符串并用一些特殊的数值替换“NAN”,例如一个大的负值。内部函数可以提供帮助,例如,
索引
。然后使用“内部读取”将字符串读取到数值变量中

请看:,我让它工作了。 代码如下:

  10  read(10,'(a)',err=16,end=20) linha
      linha=trim(adjustl(linha))
      pos1=1
      n2=0
      DO
      pos2 = INDEX(linha(pos1:), ",")

      IF (pos2 == 0) THEN
      n2 = n2 + 1
      strings(n2) = linha(pos1:)
      EXIT
      END IF
      n2 = n2 + 1
      strings(n2) = linha(pos1:pos1+pos2-2)
      pos1 = pos2+pos1
      END DO

      f=strings(1)
      read(strings(2),*) time(i)

      j=1
  11  read(strings(j+2), *,err=12) a(i,j)
      j=j+1
      IF (j > 14) THEN
      goto 13
      END IF
      goto 11

  12  a(i,j)=9999
      j=j+1
      goto 11

  13  IF (a(i,6)==9999) THEN
      goto 14
      END IF
      pp=1000.
      c1=0.622
      c2=1.-c1
      rv=461.5
      e=0.001*a(i,6)*rv*(a(i,4)+273.15)
      a(i,6)=1000*e*c1/(100*pp-c2*e)    
  14  IF (a(i,5)==9999) THEN
      goto 15
      END IF 
      mimol=a(i,5)/44
      a(i,5)=mimol*83.14*(a(i,4)+273.15)/pp
  15  i=i+1
      n=i-1
      if (i.gt.nmax) goto 20
      goto 10

  16  i=i+1
      goto 10
谢谢你的帮助。

我让它工作起来了。 代码如下:

  10  read(10,'(a)',err=16,end=20) linha
      linha=trim(adjustl(linha))
      pos1=1
      n2=0
      DO
      pos2 = INDEX(linha(pos1:), ",")

      IF (pos2 == 0) THEN
      n2 = n2 + 1
      strings(n2) = linha(pos1:)
      EXIT
      END IF
      n2 = n2 + 1
      strings(n2) = linha(pos1:pos1+pos2-2)
      pos1 = pos2+pos1
      END DO

      f=strings(1)
      read(strings(2),*) time(i)

      j=1
  11  read(strings(j+2), *,err=12) a(i,j)
      j=j+1
      IF (j > 14) THEN
      goto 13
      END IF
      goto 11

  12  a(i,j)=9999
      j=j+1
      goto 11

  13  IF (a(i,6)==9999) THEN
      goto 14
      END IF
      pp=1000.
      c1=0.622
      c2=1.-c1
      rv=461.5
      e=0.001*a(i,6)*rv*(a(i,4)+273.15)
      a(i,6)=1000*e*c1/(100*pp-c2*e)    
  14  IF (a(i,5)==9999) THEN
      goto 15
      END IF 
      mimol=a(i,5)/44
      a(i,5)=mimol*83.14*(a(i,4)+273.15)/pp
  15  i=i+1
      n=i-1
      if (i.gt.nmax) goto 20
      goto 10

  16  i=i+1
      goto 10
谢谢你的帮助。

我让它工作起来了。 代码如下:

  10  read(10,'(a)',err=16,end=20) linha
      linha=trim(adjustl(linha))
      pos1=1
      n2=0
      DO
      pos2 = INDEX(linha(pos1:), ",")

      IF (pos2 == 0) THEN
      n2 = n2 + 1
      strings(n2) = linha(pos1:)
      EXIT
      END IF
      n2 = n2 + 1
      strings(n2) = linha(pos1:pos1+pos2-2)
      pos1 = pos2+pos1
      END DO

      f=strings(1)
      read(strings(2),*) time(i)

      j=1
  11  read(strings(j+2), *,err=12) a(i,j)
      j=j+1
      IF (j > 14) THEN
      goto 13
      END IF
      goto 11

  12  a(i,j)=9999
      j=j+1
      goto 11

  13  IF (a(i,6)==9999) THEN
      goto 14
      END IF
      pp=1000.
      c1=0.622
      c2=1.-c1
      rv=461.5
      e=0.001*a(i,6)*rv*(a(i,4)+273.15)
      a(i,6)=1000*e*c1/(100*pp-c2*e)    
  14  IF (a(i,5)==9999) THEN
      goto 15
      END IF 
      mimol=a(i,5)/44
      a(i,5)=mimol*83.14*(a(i,4)+273.15)/pp
  15  i=i+1
      n=i-1
      if (i.gt.nmax) goto 20
      goto 10

  16  i=i+1
      goto 10
谢谢你的帮助。

我让它工作起来了。 代码如下:

  10  read(10,'(a)',err=16,end=20) linha
      linha=trim(adjustl(linha))
      pos1=1
      n2=0
      DO
      pos2 = INDEX(linha(pos1:), ",")

      IF (pos2 == 0) THEN
      n2 = n2 + 1
      strings(n2) = linha(pos1:)
      EXIT
      END IF
      n2 = n2 + 1
      strings(n2) = linha(pos1:pos1+pos2-2)
      pos1 = pos2+pos1
      END DO

      f=strings(1)
      read(strings(2),*) time(i)

      j=1
  11  read(strings(j+2), *,err=12) a(i,j)
      j=j+1
      IF (j > 14) THEN
      goto 13
      END IF
      goto 11

  12  a(i,j)=9999
      j=j+1
      goto 11

  13  IF (a(i,6)==9999) THEN
      goto 14
      END IF
      pp=1000.
      c1=0.622
      c2=1.-c1
      rv=461.5
      e=0.001*a(i,6)*rv*(a(i,4)+273.15)
      a(i,6)=1000*e*c1/(100*pp-c2*e)    
  14  IF (a(i,5)==9999) THEN
      goto 15
      END IF 
      mimol=a(i,5)/44
      a(i,5)=mimol*83.14*(a(i,4)+273.15)/pp
  15  i=i+1
      n=i-1
      if (i.gt.nmax) goto 20
      goto 10

  16  i=i+1
      goto 10

谢谢你的帮助。

你能用C写一个快速的解析器来清理你的文件吗?这个过程用Fortran来清理文件吗?听起来你应该知道怎么做,而且不需要重写所有的代码……这不是一个好主意。数据已经通过3个程序运行了,我不想再增加一个步骤。不管怎样,谢谢你的提示。你能用C写一个快速的解析器来清理你的文件吗?听起来你应该知道怎么做,而且不需要重写所有的代码……这不是一个好主意。数据已经通过3个程序运行了,我不想再增加一个步骤。不管怎样,谢谢你的提示。你能用C写一个快速的解析器来清理你的文件吗?听起来你应该知道怎么做,而且不需要重写所有的代码……这不是一个好主意。数据已经通过3个程序运行了,我不想再增加一个步骤。不管怎样,谢谢你的提示。你能用C写一个快速的解析器来清理你的文件吗?听起来你应该知道怎么做,而且不需要重写所有的代码……这不是一个好主意。数据已经通过3个程序运行了,我不想再增加一个步骤。不管怎样,谢谢你的提示。看起来没有一个简单的方法可以做到这一点。。。我必须把整行读成一个字符串,把它分成更小的字符串,然后把它们一个接一个地转换成浮点数。我不知道用fortran怎么做,希望不是很难。谢谢你的帮助,我明天会试试。看来没有一个简单的方法可以做到。。。我必须把整行读成一个字符串,把它分成更小的字符串,然后把它们一个接一个地转换成浮点数。我不知道用fortran怎么做,希望不是很难。谢谢你的帮助,我明天会试试。看来没有一个简单的方法可以做到。。。我必须把整行读成一个字符串,把它分成更小的字符串,然后把它们一个接一个地转换成浮点数。我不知道用fortran怎么做,希望不是很难。谢谢你的帮助,我明天会试试。看来没有一个简单的方法可以做到。。。我必须把整行读成一个字符串,把它分成更小的字符串,然后把它们一个接一个地转换成浮点数。我不知道用fortran怎么做,希望不是很难。谢谢你的帮助,我明天就试试。