Fortran Coder

查看: 17262|回复: 8
打印 上一主题 下一主题

[文件读写] 将一个文件中的前几行内容放在另一个文件的前几行

[复制链接]

40

帖子

11

主题

0

精华

大宗师

F 币
4130 元
贡献
1857 点

规矩勋章

QQ
跳转到指定楼层
楼主
发表于 2016-10-13 15:54:49 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 978142355 于 2016-10-13 15:56 编辑

如题,打算把aa.cube文件的前10行放在pot.cub文件的最开头,自己写了程序,如下。由于两个文件都比较大(单个210M,仅仅上传了删改后的数据),发现需要5分钟才能转化完成,还不如手动直接复制粘贴……………………所以开贴求助大家,如何既能实现如题的功能,时间消耗的还比较少。
[Fortran] 纯文本查看 复制代码
    program pot_head
    implicit none
    integer i,j,ierr
    character(len=84) str

    open(11,file='aa.cube') 
    open(12,file='temp1')
    open(13,file='pot.cub')
    open(14,file='temp2')
    i=0
    do
        read(11,"(a84)",iostat=ierr) str
        if(str(9:10)=='E') exit
        if(ierr/=0) exit
        i=i+1
    end do
    rewind(11)
    do j=1,i
        read(11,"(a84)") str
        write(12,"(a84)") str
    end do
    close(11)
    rewind(12)
    do j=1,i
        read(12,"(a84)") str
        write(14,"(a84)") str
    end do
    do
        read(13,"(a84)",iostat=ierr) str
        if (ierr/=0) exit
        write(14,"(a84)") str
    end do
    close(12,status='delete')
    close(13,status='delete')
    rewind(14)
    open(15,file='pot.cub')
    do
        read(14,"(a84)",iostat=ierr) str
        if(ierr/=0) exit
        write(15,"(a84)") str
    end do
    close(14,status='delete')
    close(15)
    read(*,*)
    end program pot_head


input.rar

9.75 KB, 下载次数: 14

输入文件,解压后出现aa.cube和pot.cub

分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩
where is dream,where is home

40

帖子

11

主题

0

精华

大宗师

F 币
4130 元
贡献
1857 点

规矩勋章

QQ
沙发
 楼主| 发表于 2016-10-13 17:02:01 | 显示全部楼层
谢谢Li老师,您的这个代码减少了一次复制数据的过程,windows下速度还是不敢恭维,不过Linux系统下可以接受,再次谢谢您。PS:这扩展函数还是很不错的,虽然老大的视频里强调过能不用就不用,但这次不知道有没有其他方法可以替代这个扩展函数。
where is dream,where is home

40

帖子

11

主题

0

精华

大宗师

F 币
4130 元
贡献
1857 点

规矩勋章

QQ
板凳
 楼主| 发表于 2016-10-14 08:25:17 | 显示全部楼层
pasuka 发表于 2016-10-13 23:17
最简单的话,先把aa.cube的头10行的数据写入文件pot_new.cub
然后用管道命令添加后续内容
Windows可以dos命 ...

嗯,谢谢pasuka老师,这种方法很简洁,也很简单,速度的话,和上面Li老师的差不多,谢谢你的建议,让我又知道了一种方法。
where is dream,where is home

40

帖子

11

主题

0

精华

大宗师

F 币
4130 元
贡献
1857 点

规矩勋章

QQ
地板
 楼主| 发表于 2016-10-15 09:41:01 | 显示全部楼层
pasuka 发表于 2016-10-14 09:17
过奖了
换成copy命令合并两个文件,也许能进一步提高效率譬如

太感谢您了,您的这个方法非常不错,这个是在windows下可以,Linux系统下不知道可不可以?再次感谢您又提供了一个新的方法O(∩_∩)O~
where is dream,where is home

40

帖子

11

主题

0

精华

大宗师

F 币
4130 元
贡献
1857 点

规矩勋章

QQ
5#
 楼主| 发表于 2016-10-15 19:46:10 | 显示全部楼层
vvt 发表于 2016-10-15 11:28
head -10 aa.cube > pot_new.cub
cat pot.cub >> pot_new.cub

谢谢vvt。Linux命令,这个速度非常快,几乎是一瞬间完成,看来得加入脚本,谢谢O(∩_∩)O~,这个帖子学到了好多东西,非常感谢。
where is dream,where is home
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-5-9 06:28

Powered by Tencent X3.4

© 2013-2024 Tencent

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