易码技术论坛

 找回密码
 加入易码
搜索
查看: 164806|回复: 4

关于PUT,GET,FIELD的问题

[复制链接]
发表于 2005-5-1 18:51:00 | 显示全部楼层
FIELD的用法是为随机文件的数据分配缓冲区大小
因为随机文件数据都是连着的~没有分隔~所以需要这个命令使程序知道读出或写进的都是什么东西
比如FIELD #1,2 AS A$,4 AS B$就是将随机文件的一条记录前2个字节规定为A$的内容~接下来4个字节的内容规定为B$的内容
这时候使用GET #1,1就会读入#1文件的第一条记录并把此记录前2个字节送入A$,接下来4个字节送入B$
而使用PUT#1,1就会将A$和B$的内容和起来存入文件的第一条记录

而在对A$和B$赋值的过程中就需要使用RSET和LSET
因为使用普通的A$="XXX"会在内存中新开一块地址存放新的A$
而使用RSET和LSET就不会如此
它们的作用是覆盖原A$内容 长度不变
而区别是一个右对齐一个左对齐
比如
A$="XX"
LSET A$="ABCD"
PRINT A$
屏幕显示
AB
因为A$本来只有2长度用LSET后只取2长度 而LSET是左对齐 所以取左边的2个
我觉得用RSET应该会显示
CD
可事实用BASIC显示的仍然是
AB
不知道为何

而如果是
A$="AAAA"
LSET A$="AB"
PRINT A$
会显示
ABAA
因为原来是4长度 LSET后保持4长度 可只有2长度内容 所以覆盖了前面的2长度的两个A
所以如果使用RSET我觉得应该显示
AAAB
可是事实为显示
  AB
前面的两个A被空格所覆盖

不过有一点
多多使用LSET和RSET给字符串赋值可以有效防止out of memory的发生
就是这样

很久没玩BASIC~不知道记队记错~

[此贴子已经被作者于2005-5-2 7:39:19编辑过]

 楼主| 发表于 2005-5-2 14:52:00 | 显示全部楼层
那 OPEN "xxx" FOR RANDOM AS#1 LEN=1

LEN在这里是什么意思呢?是一个字符的最大长度吗?
发表于 2005-5-2 17:25:00 | 显示全部楼层
因为随机文件的存储格式就是一块连续的数据 纯数据 没有任何分隔
我们对其的操作是按条完成的
而LEN就是指定一条记录为多少长度
比如我们一次要存取6长度的内容
那我们OPEN的时候就要使LEN=6
比如:
XXX文件中存储了ABCCDEFFGHJJ……等内容
OPEN "XXX" FOR RANDOM AS #1 LEN=6
FIELD #1,4 AS A$,2 AS B$
GET #1,1
程序会指定一条记录的长度为6其中前4字节为A$后2字节为B$
然后我们GET
程序会取出第一条记录也就是前面的6字节内容ABCCDE
然后将ABCC送A$ DE送B$
如果我们GET #1,2的话
就取出第二个6字节的内容既FFGHJJ
然后送FFGH到A$ JJ到B$

PUT也是一样
比如:
LSET A$="XXXX"
LSET B$="YY"
PUT #1,1
然后文件中前6字节的内容也就是第一条记录被存为XXXXYY


随机文件的好处就是存取自由~想操作哪条记录就能操作哪条记录~而且速度教顺序文件快的多……

[此贴子已经被作者于2005-5-2 17:45:25编辑过]

 楼主| 发表于 2005-5-2 19:25:00 | 显示全部楼层
全明白了

非常感谢

有机会教教我你的【冲出海底隧道】里面的汇编内容吧

P.S:最近在研究BASIC+汇编
 楼主| 发表于 2005-5-1 18:29:08 | 显示全部楼层 |阅读模式
谁可以教教我这几个语句的具体内容和用法?包括RSET和LSET

虽然我大致了解其用法,但我希望得到一个深入的了解。

谢谢
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2025-6-16 00:13 , Processed in 0.013099 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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