Fortran Coder

查看: 7233|回复: 2
打印 上一主题 下一主题

[文件读写] 想统计一篇文章的总字数

[复制链接]

23

帖子

10

主题

0

精华

熟手

F 币
145 元
贡献
90 点
跳转到指定楼层
楼主
发表于 2014-11-28 15:52:27 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
[Fortran] 纯文本查看 复制代码
01module constant
02         implicit none
03         integer n,nmax,cnum
04         character(*):: filename
05         character*1 sign
06         integer count
07         integer error
08 end module constant
09 
10 module dealfile
11 use constant
12 
13 contains
14 subroutine totalnum(filename,count,nmax,sign,cnum())
15         integer count,nmax,i,n,tonum
16         character*1 buffer(1:nmax)
17               character(*):: filename
18         character*1 sign
19        character,allocatable :: string(:)
20        integer,allocatable :: cnum(:)
21         open(10,FILE=filename)     
22         allocate(string(n))
23         allocate(cnum(n))
24 
25     do n=1,count
26         READ(10,100) string(n)
27 100        format(<nmax>A1)
28         write(*,*)string(n)
29     buffer=string(n)
30     cnum(1)=1
31         do i=1,nmax-1
32           if((buffer(i)==sign) .AND. (buffer(i+1)/=sign)) cnum(n)=cnum(n)+1
33         end do
34         tonum=tonum+cnum(n)
35     end do
36         close(10)
37 end subroutine totalnum
38 
39 end module dealfile
40 
41 program main
42 use constant
43 use dealfile
44 
45         print*,'文件名:'
46         read*,filename
47        count=0
48        open(10,file=filename,status='old')
49        do while (.true.)
50        read(10,*,iostat=error) line
51        if(error/=0)exit
52        count=count+1
53        end do
54close(10)
55 
56         print*,'行数:'
57         write(*,*)count
58         print*,'行的最大列数:'
59         read*,nmax
60         print*,'分隔符:'
61         read(*,100),sign
62 
63 100        format(A1)
64         call totalnum(filename,count,nmax,sign,cnum(n))
65         print*,tonum
66 end program

F6(0AT]C6A(J`(2_22{MS]9.jpg (240.44 KB, 下载次数: 290)

错误····

错误····
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

740

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
717 元
贡献
367 点

新人勋章爱心勋章水王勋章元老勋章热心勋章

沙发
发表于 2014-11-28 17:26:18 | 只看该作者
本帖最后由 楚香饭 于 2014-11-28 17:28 编辑

你这代码问题太多了。语法错误一大堆,算法也不正确。

建议你直接使用这个代码:http://fcode.cn/code_gen-34-1.html 获取文件的行数和列数,每行的列数相加即可。

针对你的代码,我做了一些语法上的纠正。(算法就不纠正了,思路不对。)

最后,排版很重要、很重要、很重要、很重要

[Fortran] 纯文本查看 复制代码
01Module Constant
02  Implicit None
03  Integer N, Nmax
04  integer , allocatable :: Cnum(:) !// 定义为可变
05  Character(len=512) :: Filename !// 必须指定长度
06  Character(len=1) :: Sign
07  integer :: Tonum !// Tonum放上面,不然主程序收不到
08  Integer Count
09  Integer Error
10End Module Constant
11 
12Module Dealfile
13  Use Constant
14 
15Contains
16  Subroutine Totalnum(Filename, Count, Nmax, Sign, Cnum) !// 不带括号
17    Integer Count, Nmax, I, N
18    Character *1 Buffer(1:Nmax)
19    Character (*) :: Filename
20    Character *1 Sign
21    Character, Allocatable :: String(:)
22    Integer, Allocatable :: Cnum(:)
23    integer :: j
24    Open (10, File=Filename)
25    Allocate (String(Nmax)) !// 此处为 NMax
26    Allocate (Cnum(Nmax))  !// 同上
27    Tonum = 0 !// 初值要给
28    Do N = 1, Count
29      Read (10, 100) String(:N)
30      Write (*, *) String(N)
31      do j = 1 , n
32        Buffer(j:j) = String(j:j)
33      end do
34      Cnum(1) = 1
35      Do I = 1, Nmax - 1
36        If ((Buffer(I).Eq.Sign) .And. (Buffer(I+1).Ne.Sign)) Cnum(N) = Cnum(N) + 1
37      End Do
38      Tonum = Tonum + Cnum(N)
39    End Do
40    Close (10)
41    100 Format (<Nmax>A1)
42  End Subroutine Totalnum
43 
44End Module Dealfile
45 
46Program Main
47  Use Constant
48  Use Dealfile
49  Implicit None !// 非常重要
50  character(len=1) :: line
51  Print *, '文件名:'
52  Read *, Filename
53  Count = 0
54  Open (10, File=Filename, Status='old')
55  Do
56    Read (10, *, Iostat=Error) Line
57    If (Error.Ne.0) Exit
58    Count = Count + 1
59  End Do
60  Close (10)
61 
62  Print *, '行数:'
63  Write (*, *) Count
64  Print *, '行的最大列数:'
65  Read *, Nmax
66  Print *, '分隔符:'
67  Read (*, 100), Sign
68  Call Totalnum(Filename, Count, Nmax, Sign, Cnum) !// cNum 不带括号
69  Print *, Tonum
70 
71  100 Format (A1)
72End Program Main

23

帖子

10

主题

0

精华

熟手

F 币
145 元
贡献
90 点
板凳
 楼主| 发表于 2014-11-29 13:10:44 | 只看该作者
楚香饭 发表于 2014-11-28 17:26
你这代码问题太多了。语法错误一大堆,算法也不正确。

建议你直接使用这个代码:http://fcode.cn/code_gen ...

非常感谢你的耐心指导 初学fortran,想知道fortran可不可以统计一个文本中各个单词出现的次数····我编这个程序主要是为了这个目的,我的思路是先统计出文本总共的词数,不知道思路对不对···希望大师提点一下,万分感谢了
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2025-1-14 17:17

Powered by Discuz! X3.4

© 2013-2025 Comsenz Inc.

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