fortran:计算csv文件行中的数据数。

时间:2014-10-21 21:52:02

标签: csv fortran

我的任务是Fortran程序,它计算csv文件每行中的整数数。此文件的格式如下;

10,2,5,6,7,8
1,5,6,7
201,55,26,47,8,8,9,10
....

每一行都有不同数量的数字。我需要以下面的格式计算和重新排列

6 10 2 6 7 8
4 1 5 6 7
8 201 55 26 47 8 8 9 10
...

第一个整数是文件每行中的整数数。以下整数与文件中的行相同。但是应该删除逗号。我的第一种方法是阅读整行并继续。但似乎很难处理未知长度的线。

character*5000 line
open(unit=5,file="new.csv",status="old",action="read")
read(unit=5,fmt="(A)") line

如何在fortran中计算和重新排列此数据

谢谢

1 个答案:

答案 0 :(得分:2)

假设格式与您所说的一样,并且有例如没有尾随逗号或类似内容,您可以尝试类似

的内容
ian@ian-pc:~/test/csv$ cat new.csv
10,2,5,6,7,8
1,5,6,7
201,55,26,47,8,8,9,10
ian@ian-pc:~/test/csv$ cat csv.f90
Program csv

  Implicit None

  Character( Len = 5000 ) :: line

  Integer :: numnum
  Integer :: i

  Open( 10, file = 'new.csv' )

  Do
     Read( 10, '( a )', End = 200 ) line
     ! Work out how many numbers I've just eaten
     numnum = Count( (/ ( line( i:i ), i = 1, Len( line ) ) /) == ',' )
     numnum = numnum + 1
     ! Turn the commas into spaces adn work out where the original line ends
     Do i = 1, Len( line )
        If( line( i:i ) == ' ' ) Then
           Exit
        End If
        If( line( i:i ) == ',' ) Then
           line( i:i ) = ' ' 
        End If
     End Do
     Write( *, * ) numnum, line( 1:Min( Len( line ), i ) )
  End Do

200 Continue

End Program csv
ian@ian-pc:~/test/csv$ nagfor csv.f90
NAG Fortran Compiler Release 5.3.1(907)
[NAG Fortran Compiler normal termination]
ian@ian-pc:~/test/csv$ ./a.out
 6 10 2 5 6 7 8 
 4 1 5 6 7 
 8 201 55 26 47 8 8 9 10 

但我觉得可能会有更简单的事情......