Fortran Coder

查看: 21967|回复: 7
打印 上一主题 下一主题

[文件读写] 读取规则文件中数据的行数和列数

[复制链接]

66

帖子

16

主题

0

精华

专家

F 币
452 元
贡献
271 点
跳转到指定楼层
楼主
发表于 2017-1-17 14:28:50 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式
[Fortran] 纯文本查看 复制代码
Program main
Integer,parameter :: length=1000
Character(LEN=length) A,B,Filename
Integer(kind=4)::Column, Row, K,L
Column=0;Row=0;K=0;L=1;filename="test.txt"
Open (55,file=Filename)
Read(55,'(A)') A
Do I=1, length
  If(A(I:I)==','.or.A(I:I)==' ') then
    If(I-1>=L)  Column=Column+1
    L=I+1
  End if
End do
CLOSE(55)
Open (55,file=Filename)
Do
  Read(55,*,iostat=k) B
   If( k /= 0 ) Exit
       Row = Row + 1
End Do 
Close(55)
Write(*,"(A5,I6,5X,A7,I2)") "Row=",Row,"Column=",Column
End

此代码是网上一些大侠分别写的读取列数和行数的代码,我把他拿过来整理在一起了,此代码的用途可以用于动态数组以及一些数据后处理的需要
文件内容:
we rr 44
55 rr tt
44 66 77

计算结果:


应用案列
通过计算软件获得计算数据,因为有些数据经常是 采用mod(i,a)==0这个方式输出的,在数据的个数统计上有时候会比较麻烦,所以采用这样的数据处理后可以将数据作为图形自动层现出来



















评分

参与人数 1F 币 +9 贡献 +9 收起 理由
fcode + 9 + 9 赞一个!

查看全部评分

分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

66

帖子

16

主题

0

精华

专家

F 币
452 元
贡献
271 点
8#
 楼主| 发表于 2017-3-27 15:27:03 | 只看该作者
龙行天下 发表于 2017-3-27 13:33
请教一下,对于行数判断非常容易,而对于列数而言,都存在这么个问题,就是:http://fcode.cn/code_gen-34- ...

这个代码的意义在于对于一些常用程序的数据处理 如果是大规模数据,还利用这个程序,说明一开始的原始程序就是比较糟糕的

490

帖子

4

主题

0

精华

大宗师

F 币
3298 元
贡献
1948 点

水王勋章元老勋章热心勋章

7#
发表于 2017-3-27 14:20:25 | 只看该作者
龙行天下 发表于 2017-3-27 13:33
请教一下,对于行数判断非常容易,而对于列数而言,都存在这么个问题,就是:http://fcode.cn/code_gen-34- ...

Excel specifications and limits - Excel
https://support.office.com/en-us ... e-8e27-269d656771c3
即使xlsx格式规范,单个worksheet的列数不能超过16384,单列宽带不超过255个字符
从这角度分析,继续强调“本站的代码受到限制”是不是杞人忧天呢?

954

帖子

0

主题

0

精华

大师

F 币
184 元
贡献
75 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
6#
发表于 2017-3-27 13:38:57 | 只看该作者
我觉得一行要是超过1000个字符了,就该考虑用其他数据结构来存储了(比如二进制)

22

帖子

4

主题

0

精华

熟手

F 币
319 元
贡献
154 点
5#
发表于 2017-3-27 13:33:04 | 只看该作者
请教一下,对于行数判断非常容易,而对于列数而言,都存在这么个问题,就是:http://fcode.cn/code_gen-34-1.html,有一个常数,就是512,作为字符串长度,而上面的代码也是有一个1000作为可能最大列数。。
这样写法,都会让代码受到限制,并不通用。

7

帖子

1

主题

0

精华

入门

F 币
62 元
贡献
41 点

规矩勋章

地板
发表于 2017-3-23 10:05:29 | 只看该作者
[Fortran] 纯文本查看 复制代码
DO WHILE(.TRUE.)
READ(55,*,IOSTAT=IOSTAT)
IF(IOSTAT,NE.0) EXIT 
   LINES=LINES+1
ENDDO
WRITE(*,*)  LINES

66

帖子

16

主题

0

精华

专家

F 币
452 元
贡献
271 点
板凳
 楼主| 发表于 2017-1-18 09:20:52 | 只看该作者
fcode 发表于 2017-1-17 16:52
http://fcode.cn/code_gen-34-1.html
这里有现成的

谢谢  看到了

2033

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1641 元
贡献
709 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

沙发
发表于 2017-1-17 16:52:39 | 只看该作者
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-12-23 19:00

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表