Fortran Coder

查看: 13831|回复: 6

[文件读写] Fortran 将新内容写入已有文件!!

[复制链接]

33

帖子

9

主题

0

精华

熟手

F 币
147 元
贡献
94 点
发表于 2020-5-14 21:24:28 | 显示全部楼层 |阅读模式
亲们,我不知道为什么,我想将 排名这一列 写入 原来文件内容的后面,但我一执行,这个文件的原内容就消失了!!!!!求助!!!!!下面是图
1.jpg 3.PNG 2.PNG

155

帖子

2

主题

1

精华

大师

Vim

F 币
944 元
贡献
461 点

规矩勋章

发表于 2020-5-14 22:31:53 | 显示全部楼层

回帖奖励 +1

不知道有没有更好的办法。我的想法是从文件读入一行,用字符串保存。然后,再一起输入 。

33

帖子

9

主题

0

精华

熟手

F 币
147 元
贡献
94 点
 楼主| 发表于 2020-5-14 22:37:10 | 显示全部楼层
Transpose 发表于 2020-5-14 22:31
不知道有没有更好的办法。我的想法是从文件读入一行,用字符串保存。然后,再一起输入 。 ...

嗯嗯 我也知道这个方法 但我不理解我那样写入文件,为何会使文件的原内容消失

155

帖子

2

主题

1

精华

大师

Vim

F 币
944 元
贡献
461 点

规矩勋章

发表于 2020-5-14 22:43:22 | 显示全部楼层
1000 发表于 2020-5-14 22:37
嗯嗯 我也知道这个方法 但我不理解我那样写入文件,为何会使文件的原内容消失 ...

默认的原文件内容是被覆盖掉的,好像没有列尾追加的,倒是有追加在文件末尾的

1948

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1298 元
贡献
547 点

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

发表于 2020-5-14 22:47:22 | 显示全部楼层
因为文件在硬盘上都是线性的存储的。比如,你看到的样子(编辑器显示出来的样子)是这样:
AAA  BBB
CCC  DDD
但是实际它是这样的:
AAA  BBB {CRLF} CCC  DDD
其中CRLF是换行符。

所以,如果你需要在第一行插入 XXX。需要变成
AAA  BBB XXX {CRLF} CCC  DDD

那么{CRLF} CCC DDD 就需要挨着逐个向后移动。

操作系统底层没有包含这样“上层”的操作。都是靠“上层”程序员去完成的。
你看到的所有“支持列插入”的编辑器,比如 UltraEdit ,记事本,或者 VS code 这些。他们全部,全部,都是先把文件的内容放入内存,在内存中插入新的一列。
每次插入一列,后面的行的内容全部逐个后移。
最后,把插入好的内容,全部,重新写入到文件里。

所以,你要想实现这样的结构,也只能如此。

33

帖子

9

主题

0

精华

熟手

F 币
147 元
贡献
94 点
 楼主| 发表于 2020-5-14 23:38:37 | 显示全部楼层
fcode 发表于 2020-5-14 22:47
因为文件在硬盘上都是线性的存储的。比如,你看到的样子(编辑器显示出来的样子)是这样:
AAA  BBB
CCC   ...

嗯嗯 感谢回答 所以我想要直接插入一列的话 应该怎么操作呢?? 只能把原内容再输入一次吗?

250

帖子

2

主题

0

精华

宗师

F 币
1730 元
贡献
872 点

规矩勋章

发表于 2020-5-15 08:20:01 | 显示全部楼层
1000 发表于 2020-5-14 23:38
嗯嗯 感谢回答 所以我想要直接插入一列的话 应该怎么操作呢?? 只能把原内容再输入一次吗? ...

是      
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-3-29 00:03

Powered by Tencent X3.4

© 2013-2024 Tencent

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