我的任务是使用 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@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)
但我有一种感觉,可能有更简单的事情......
| 归档时间: |
|
| 查看次数: |
2669 次 |
| 最近记录: |