Fortran Coder

查看: 33408|回复: 11
打印 上一主题 下一主题

[文件读写] 读取csv文件,并进行计算

[复制链接]

25

帖子

8

主题

0

精华

熟手

F 币
164 元
贡献
104 点
跳转到指定楼层
楼主
发表于 2017-3-1 21:47:04 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
想要读取excel另存为的csv文件sheet1中数据,如图:

数据共48行,

我想要写一个程序读到这一列数据,并将这一列数据分别乘以1和2,放到第二列和第三列中,最后输出csv,以便在excel中查看。
程序faa.f如下:

运行faa.exe,出现错误:


请问是什么问题?

QQ图片20170301214104.png (7.92 KB, 下载次数: 489)

数据

数据

QQ截图20170301214416.png (18.59 KB, 下载次数: 467)

程序faa.f

程序faa.f

QQ截图20170301214621.png (19.65 KB, 下载次数: 444)

错误

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

25

帖子

8

主题

0

精华

熟手

F 币
164 元
贡献
104 点
沙发
 楼主| 发表于 2017-3-1 21:48:03 | 只看该作者
完全新手啊,听说可以艾特大神@fcode,拜托拜托

2015

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1574 元
贡献
676 点

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

板凳
发表于 2017-3-1 22:17:44 | 只看该作者
你这是在linux上跑程序,但是你却写了一个windows上的路径。

25

帖子

8

主题

0

精华

熟手

F 币
164 元
贡献
104 点
地板
 楼主| 发表于 2017-3-2 10:40:05 | 只看该作者
fcode 发表于 2017-3-1 22:17
你这是在linux上跑程序,但是你却写了一个windows上的路径。

谢谢大神,但是我更改完地址之后,如:
[Fortran] 纯文本查看 复制代码
program main
      implicit none
      integer :: i=48
      real ::f(48)
      real ::ef10=1.09,ef25=0.31
      real a(48),b(48)
      open(12 , file ="/home/iga_qtong/fortran_xcao/fa.csv")
      read(12,*)
        do i=1,48
        read(12,*) f(i)
        end do
        a(i)=f(i)*ef10
        b(i)=f(i)*ef25
        write(12,*) f(i),',',a(i),',',b(i)
      close(12)
      end program main

还是出现了以下问题,forrtl: severe (24): end-of-file during read, unit 12, file /home/iga_qtong/fortran_xcao/fa.csv
Image              PC                Routine            Line        Source            

faa.exe            00000000004052C6  Unknown               Unknown  Unknown
faa.exe            0000000000418923  Unknown               Unknown  Unknown
faa.exe            0000000000402D88  Unknown               Unknown  Unknown
faa.exe            0000000000402C7E  Unknown               Unknown  Unknown
libc.so.6          0000003358A1ED1D  Unknown               Unknown  Unknown
faa.exe            0000000000402B89  Unknown               Unknown  Unknown

并没有输出我想要的csv格式,我查看之后发现有人输出csv,使用了
real ::f_openfile    f_openfile=shellexecute(0,"open","/home/iga_qtong/fortran_xcao/fa.csv",null,null,12)
但是把这句加入会出现以下错误:
faa.f(18): error #5120: Unterminated character constant
      f_openfile=shellexecute(0,"open","/home/iga_qtong/fortran_xcao/fa.csv",null,null,12)
---------------------------------------^
faa.f(18): error #5082: Syntax error, found END-OF-STATEMENT when expecting one of: ) :: , :
      f_openfile=shellexecute(0,"open","/home/iga_qtong/fortran_xcao/fa.csv",null,null,12)
------------------------------------------------------------------------------------------^
faa.f(18): error #6404: This name does not have a type, and must have an explicit type.   [SHELLEXECUTE]
      f_openfile=shellexecute(0,"open","/home/iga_qtong/fortran_xcao/fa.csv",null,null,12)
-----------------^
compilation aborted for faa.f (code 1)
请问,想要输出到底是什么格式呢?

718

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
632 元
贡献
323 点

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

5#
发表于 2017-3-2 10:44:32 | 只看该作者
请点击 回形针 图标的 按钮上传图片

25

帖子

8

主题

0

精华

熟手

F 币
164 元
贡献
104 点
6#
 楼主| 发表于 2017-3-2 10:45:34 | 只看该作者
楚香饭 发表于 2017-3-2 10:44
请点击 回形针 图标的 按钮上传图片

好的,谢谢谢谢,一直上传不上去,谢谢提示。

718

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
632 元
贡献
323 点

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

7#
发表于 2017-3-2 10:48:03 | 只看该作者
end-of-file during read
意思是,读取时遇到了文件的尾部。(即文件内容的长度不符合代码的要求)

对于文本文件,尽量不要同时对一个文件一边读,一边写。最好是另外打开一个文件,作为输出文件,写入输出文件。

shellexecute 是 windows 上的函数,并不是用来输出 csv 的,而是用来调用 excel(或其他程序)来打开 csv 文件。

718

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
632 元
贡献
323 点

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

8#
发表于 2017-3-2 10:56:46 | 只看该作者
试试这样:

[Fortran] 纯文本查看 复制代码
program main
  implicit none
  integer :: k
  real ::f , a , b
  real ::ef10=1.09,ef25=0.31
  open(12 , file ="/home/iga_qtong/fortran_xcao/fa.csv")
  open(13 , file ="/home/iga_qtong/fortran_xcao/faout.csv")
  read(12,*)
  do
    read(12,*,iostat=k) f
    if ( k/= 0 ) exit
    a=f*ef10
    b=f*ef25
    write(13,*) f,',',a,',',b
  end do    
  close(12)
  close(13)
end program main

25

帖子

8

主题

0

精华

熟手

F 币
164 元
贡献
104 点
9#
 楼主| 发表于 2017-3-2 16:11:47 | 只看该作者

非常感谢,还有一些问题,不知可否给予解答。
以下是数据:

想要通过计算,把a-k列的值经过计算,放到l-t中,
以下是我写的程序:

但是在ifort farm_fm.f -o farm_fm.exe时出现以下错误:

请问是什么问题?

954

帖子

0

主题

0

精华

大师

F 币
184 元
贡献
75 点

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

QQ
10#
发表于 2017-3-2 19:33:56 | 只看该作者
太长了,该续行了。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-11-11 02:08

Powered by Tencent X3.4

© 2013-2024 Tencent

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