我的任务是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中计算和重新排列此数据
谢谢
答案 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
但我觉得可能会有更简单的事情......