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

1 csv fortran

我的任务是使用 Fortran 程序来计算 csv 文件每一行中的整数数量。该文件的格式如下;

10,2,5,6,7,8
1,5,6,7
201,55,26,47,8,8,9,10
....
Run Code Online (Sandbox Code Playgroud)

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

6 10 2 5 6 7 8
4 1 5 6 7
8 201 55 26 47 8 8 9 10
...
Run Code Online (Sandbox Code Playgroud)

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

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

如何在 Fortran 中计算和重新排列这些数据

谢谢

Ian*_*ush 5

假设格式正如您所说,并且没有尾随逗号或类似的内容,您可以尝试类似的方法

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 
Run Code Online (Sandbox Code Playgroud)

但我有一种感觉,可能有更简单的事情......