《QB程序语言设计》读书笔记

今天从网上找了个《QB程序语言设计》的PDF,看完之后总结了几条笔记,也亲自在自己的计算机上验证了下大部分的程序和用法,现在我把今天的工作记下来,以备日后用到。

《QB程序语言设计》,周察金主编,高等教育出版社,ISBN号为7–04–015152–9

这里说的QB即QBasic语言,我用的编译器是Win32下的FreeBasic(版本1.00.0),IDE为FBIde(版本0.4.6r4)

安装过程可以参考我写的这篇博客:http://my.oschina.net/Tsybius2014/blog/355213

这里面的代码我都是在这个环境下编译和运行的

1.定义变量和从键盘接收输入

DIM <变量名表> [AS 类型名] [, <变量名表> [AS 类型名] ...]

INPUT [;] [提示信息 {,|;}] <变量名表>

下面这段代码的输出为“123 456”

DIM A1 AS INTEGER, A2 AS INTEGER
INPUT "PRINT TWO INTEGERS: ", A1, A2
PRINT A1; A2
SLEEP

2.执行语句和非执行语句

1)执行语句用于完成某种特定操作,如输入输出数据、计算数据等

2)非执行语句用于为变量分配内存空间、定义变量类型、指定变量属性以及为程序添加注释等

3.一行放置多行语句,要用冒号隔开

下面这段代码的输出为“123”

DIM A1 AS INTEGER : A1 = 123 : PRINT A1 : SLEEP

4.QB语言对标识符、变量名的大小写不敏感

FOR、for、For都是同一个关键字,A1和a1是同一个变量

5.对语句用法进行说明的格式符号

形如“INPUT [;] [提示信息 {,|;}] <变量名表>”这样对语句用法进行说明的格式,用到了以下几种符号:

1)尖括号(<和>),表示必选项

2)方括号([和]),表示可选项

3)花括号({和}),表示多中取一,竖线隔开多个选项

4)省略号(···),表示可以按照前面相同的格式重复

6.关于QBasic

QBasic是美国Microsoft公司开发的结构化程序设计语言,QBasic是QuickBASIC语言和VisualBASIC语言的子集

7.CLS语句可以用来清屏

下面这段代码只会输出“5678”

PRINT "1234" : CLS : PRINT "5678" : SLEEP

8.数据类型的主要指标

变量名长度 1 ~ 40个字符
字符串长度 0 ~ 32767个字符
整型 -32768 ~ 32767
长整形 -2147483648 ~ 2147483647
单精度正数 2.802597E-45 ~ 3.402823E+38
单精度负数 3.402823E+38 ~ -2.802597E-45
双精度正数 4.940656458412465D-324 ~ 1.79769313486231D+308
双精度负数 1.79769313486231D+308 ~ -4.940656458412465D-324

9.数组的主要技术指标

静态数组大小 1B ~ 65535 bytes(64KB)
动态数组大小 ~ 65535 bytes(64KB)
数组维数 1 ~ 60
默认的数组维数 1 ~ 8
数组下标范围 -32768 ~ 32767

10.过程与数据文件的主要技术指标

过程尺寸 0 ~ 64KB
传递参数数量 0 ~ 60
数据文件数 1 ~ 255
数据文件记录数 1 ~ 2147483647
数据文件记录尺寸 1 ~ 32KB
数据文件尺寸 0 ~ 磁盘可用空间
路径名字符数 1 ~ 127
错误信息号 1 ~ 255

11.PRINT语句中的逗号(,)与分号(;)

逗号表示标准输出,分号表示紧凑输出,以下面代码为例:

PRINT "123", "456", "789"
PRINT "123"; "456"; "789"
PRINT 123, 456, 789
PRINT 123; 456; 789
SLEEP

输出结果为:

212814_69Jz_1425762.png

12.关于屏幕坐标系

原点在左上角。横轴是x轴,正方向向右。纵轴是y轴,正方向向下

13.SCREEN语句:设置屏幕显示模式

用法为:“SCREEN [屏幕显示模式][, 颜色开关]”,屏幕显示模式代码表如下:

213820_9UWY_1425762.png

14.COLOR语句:设置屏幕显示颜色

原书中说COLOR语句一共有4种用法:

格式1:COLOR [前景色][,背景色][,边框色]
格式2:COLOR [背景色][,调色板]
格式3:COLOR [前景色][,背景色]
格式4:COLOR [前景色]

不过我用FreeBasic只试出了COLOR语句分别带一个参数和两个参数的两种用法

颜色代码如下表:

214153_ONo2_1425762.png

15.基本绘图语句

1)画点使用PSET和PRESET

PSET用法:PSET [STEP](x, y)[, 颜色代码]

PRESET用法:PRESET [STEP](x, y)[, 颜色代码]

【1】(x,y)指定画点的坐标,其中x指定列坐标,y指定行坐标,x、y的取值范围由SCREEN语句设置的屏幕显示模式的显示分辨率决定。如果x、y 的取值超出屏幕,则屏幕上无任何显示。

【2】选择[STEP],指定(x,y)为相对坐标。缺省该选项,默认(x,y)为绝对坐标。绝对坐标以原点(0,0)为参照点,相对坐标以当前光标所在点为参照点。

【3】选择[, 颜色代码],使用指定的颜色绘点。若缺省该选项,则用前景色绘点。

【4】PRESET 语句与PSET语句的区别是:缺省“颜色代码”选项时,PSET语句用前景色画点,PRESET语句用背景色画点。

2)画线使用LINE和DRAW(画矩形也用LINE)

LINE用法:LINE [ [STEP] (x1, y1) ] - [STEP] (x2, y2) [, 颜色代码]

【1】(x1, y1)指定直线起点坐标,(x2, y2)指定终点坐标。若缺省起点坐标(x1, y1),则默认直线起点为当前光标所在点。

【2】选择[STEP]选项,指定点的坐标为相对坐标。缺省该选项,点的坐标是绝对坐标。

【3】选择[, 颜色代码],用指定的颜色画线。若缺省该选项,则用前景色画线。

另:画矩形的用法:LINE [ [STEP] (x1, y1) ] - [STEP] (x2, y2) , [颜色代码], B[F]

【1】(x1, y1)、(x2, y2)指定矩形对角线的两个顶点坐标。若缺省(x1, y1),则默认当前点为矩形对角线的一个顶点。

【2】[STEP]选项的意义与画线语句相同。

【3】画矩形语句比画线语句多一个选项B[F]。若选择[F],则用指定颜色填充矩形。若缺省该选项,则用指定颜色画矩形框。

【4】选择[颜色代码],用指定的颜色画矩形框或填充矩形。若缺省该选项,则用前景色画矩形或填充矩形。

DRAW用法:DRAW <绘图命令>

绘图命令表如下:

215708_A91M_1425762.png

3)画圆、椭圆、扇形或弧用CIRCLE

用法:CIRCLE [STEP](x, y),<半径>[, 颜色代码][, 起始角][, 终止角][, 纵横比]

【1】(x, y)指定圆、椭圆、扇形或弧的中心坐标。

【2】<半径>指定圆、椭圆(主轴方向)、扇形或弧的半径。

【3】选择[起始角]和[终止角],指定所画圆弧或椭圆弧的起始角度和终止角度。它们都是弧度值,取值范围为-2π~2π。若缺省这两项,则指定画圆或椭圆,它们的默认值分别为0和2π。

【4】选择[纵横比],指定所画椭圆或椭圆弧的y轴与x轴半径之比。当比值小于1时,椭圆的长轴位于x轴;当比值大于1时,椭圆的长轴位于y轴。若缺省该选项,则指定画圆。[纵横比]的默认值为1。

【5】[STEP]、[, 颜色代码]选项的意义与画线语句相同。

4)图形填充颜色使用PAINT

用法:PAINT [STEP](x, y)[, 填充颜色代码][, 边框颜色代码]

【1】(x, y)指定填充的区域。如果(x, y)为封闭图形内任意一点,则填充封闭图形内部。如果(x, y)在图形边框上,则PAINT 语句无效;如果(x, y) 位于封闭图形外,将对图形外的窗口填充颜色。如果图形不是封闭的,则颜色将从缺口溢出。

【2】[STEP]选项的意义与画点语句相同。

【3】选择[,填充颜色代码],用指定的颜色填充图形。若缺省该选项,则使用前景色填充图形。

【4】选择[,边框颜色代码],用指定的颜色设置图形边框。若缺省该选项,则保持原来的边框颜色。

5)定义窗口使用VIEW

用法:VIEW [ [SCREEN](x1,y1)-(x2,y2)[,窗口颜色代码] [,边框颜色代码] ]

16.QB中的数据类型

220727_8I5l_1425762.png

17.QB中的常量类型和变量类型

220925_jwoF_1425762.png

220925_OXQo_1425762.png






定义变量使用DIM:DIM <变量名表> [AS 类型名] [, <变量名表> [AS 类型名]⋯]

【1】<变量名表>指定需要定义类型的变量。如果<变量名表>中的变量名多于一个,则每两个变量名之间使用逗号分隔。

【2】[AS 类型名]指定变量的类型,可以使用的类型名及其意义如表3-4 所示。如果缺省[AS类型名],系统默认变量为单精度实型变量。

常用的变量类型名有:INTEGER(整型)、SINGLE(单精度实型)、LONG(长整型)、DOUBLE(双精度实型)、STRING(字符型)

变量赋值可以用LET语句(LET关键字可省):[LET] 变量名=表达式

常量第一次赋值前面加CONST:CONST <符号常量名>=<常量值>

18.QB中的算术运算符

221633_rx3V_1425762.png

19.QB中的关系运算符

221741_f3k7_1425762.png

20.QB中的逻辑运算符

221829_MUyc_1425762.png

21.QB常用函数

1)数值函数:

SQR(求平方根)、ABS(求绝对值)、INT(取地板)、FIX(截取小数)、SGN(符号函数)、EXP(e的幂)、LOG(自然对数)RND(返回0-1的单精度随机数)

2)三角函数:

SIN(正弦函数)、COS(余弦函数)、TAN(正切函数)、ATN(反正切函数)

3)日期和时间函数:

DATE(当前日期)、TIME(当前时间)、TIMER(上一个午夜0时到现在的秒数)

4)数值类型转换函数:

CINT(将参数小数部分四舍五入,使其转换成整型数)、CLNG(将参数小数部分四舍五入,使其转换成长整型数)、CSNG(将参数转换为单精度实数)、CDBL(将参数转换为双精度实数)

21.输出语句

1)输出文字到控制台,可以使用PRINT:PRINT [USING "格式字符串";][输出项列表]

格式字符如下表:

223836_HIvE_1425762.png

2)TAB函数可以用来指定PRINT语句的输出位置

3)SPACE函数可以返回指定数量个空格

4)使用LOCATE 语句改变PRINT语句的输出位置:LOCATE [行][,列]

5)输入语句INPUT将键盘输入的数据赋给指定的变量:INPUT[;][提示信息{,|;}]<变量列表>

6)也可使用读数语句READ和置数语句DATA来完成数据赋值工作(READ和DATA应联合使用)

【1】DATA语句:DATA <常量表>

语句功能:为READ 语句提供数据。

语句说明:<常量表>指定供READ 语句读取的数据。“常量表”可以有一个或多个常量,如果有多个常量,每两个常量之间用逗号分隔。

【2】READ语句:READ <变量表>

语句功能:读取DATA 语句提供的数据,并赋值给指定的变量。

语句说明:<变量表>指定存放数据的变量。“变量表”可以有一个或多个变量,如果有多个变量,每两个变量之间用逗号分隔。

7)RESTORE语句将数据指针返回到指定位置,使READ语句可以重新读取DATA语句提供的数据

22.REM语句或单引号(')可用于注释该行在它们之后的字符

23.END语句用于结束整个程序

24.流程图用到的元素

224429_whsP_1425762.png

25.分支结构

1)IF语句

IF <条件1> THEN
    <语句组1>
ELSEIF <条件2> THEN
    <语句组2>
[ELSEIF <条件3> THEN
    <语句组3>
    ...
ELSEIF <条件n> THEN
    <语句组n>]
[ELSE
    <语句组m>]
END IF

2)SELECT-CASE语句

SELECT CASE <测试表达式>
    CASE <表达式表1>
        <语句组1>
    [CASE <表达式表2>
        <语句组2>
        ...
    CASE <表达式表n>
        <语句组n>]
    [CASE ELSE
        <语句组m>]
END SELECT

26.循环结构

下面7段代码都输出“0 1 2 3 4 5 6 7 8 9”,分别采用了7种不同的循环结构:

1)WHILE-WEND循环

DIM A AS INTEGER = 0
WHILE A < 10
    PRINT A;
    A = A + 1
WEND
SLEEP

2)DO WHILE-LOOP循环

DIM A AS INTEGER = 0
DO WHILE A < 10
    PRINT A;
    A = A + 1
LOOP
SLEEP

3)DO-LOOP WHILE循环

DIM A AS INTEGER = 0
DO
    PRINT A;
    A = A + 1
LOOP WHILE A < 10
SLEEP

4)DO UNTIL-LOOP循环

DIM A AS INTEGER = 0
DO UNTIL A = 10
    PRINT A;
    A = A + 1
LOOP 
SLEEP

5)DO-LOOP UNTIL循环

DIM A AS INTEGER = 0
DO 
    PRINT A;
    A = A + 1
LOOP UNTIL A = 10 
SLEEP

6)DO-LOOP循环

DIM A AS INTEGER = 0
DO 
    PRINT A;
    A = A + 1
    IF A = 10 THEN GOTO X
LOOP 
X:
SLEEP

这里使用了GOTO语句:GOTO <行标识符>

7)FOR循环

DIM A AS INTEGER
FOR A = 0 TO 9 
    PRINT A;
NEXT
SLEEP

DIM A AS INTEGER
FOR A = 0 TO 9 
    PRINT A;
NEXT A
SLEEP

27.暂停语句SLEEP

SLEEP语句用法:SLEEP [秒数]

[秒数]指定程序暂停的时间,单位是秒。如果选择[秒数],则程序暂停指定时间后自动继续运行。如果省略[秒数]或[秒数]为0,则程序将暂停直到用户按任意键为止。

28.QB中的数组

1)定义数组:DIM <数组名>[(下标)][AS 类型名][,数组名[(下标)][AS 类型名]

“下标”指定数组的下标。“下标”可以是一个或多个算术表达式,若是多个算术表达式,每两个表达式之间用逗号分隔。“下标”还可以是“[下界 TO ]<上界>”的形式,其中,“下界”和“上界”分别表示下标的最小值和最大值,“下界”的默认值是 0。

2)赋值和输出:通过 数组名(下标)可以访问数组的某个元素,对其进行赋值和输出

3)OPTION BASE 语句

定义数组时,如果不指定下标的下界,则系统默认下界为0。如果希望某个下标从1 开始,可以使用“1 TO n”的形式定义下标。如果希望所有下标从1 开始,则使用OPTION BASE 语句实现。该语句的一般格式如下:OPTION BASE {0|1}

29.QB中的字符串函数

LEFT(从左端开始取子串)、RIGHT(从右端开始取子串)、MID(从指定位置开始取指定长度的子串)、LEN(字符串长度)、INSTR(查看子串第一次出现位置)、LCASE(大写转小写)、UCASE(小写转大写)、STR(数字转字符串)、VAL(字符串转数字)、LTRIM(去除左侧空格)、RTRIM(去除右侧空格)、TRIM(去除两侧空格)

DIM S AS STRING = "0123456789"

PRINT LEFT(S, 5)
PRINT RIGHT(S, 5)
PRINT MID(S, 3, 7)
PRINT LEN(S)
PRINT INSTR(S, "3456")
PRINT LCASE("abcdeABCDE")
PRINT UCASE("abcdeABCDE")
PRINT STR(1234)
PRINT VAL("12345ABCDE")
PRINT "0" + LTRIM("  ABCD  ") + "0"
PRINT "0" + RTRIM("  ABCD  ") + "0"
PRINT "0" + TRIM("  ABCD  ") + "0"

SLEEP

上面的代码运行结果为:

231305_Uv81_1425762.png

30.静态数组和动态数组

静态数组是指从建立数组到程序运行结束,数组的维数和大小都不能改变的数组。

动态数组是指在程序运行过程中可以改变其大小、或者释放所占用空间的数组。

DIM中用常量指定下标的都是静态数组,用变量指定下标的都是动态数组

31.操作数组的语句

1)ERASE语句:ERASE <数组名>[,<数组名> ...]

语句功能:重新初始化静态数组元素,释放动态数组的存储空间。

2)REDIM语句:REDIM <数组名><下标>[, <数组名><下标>...]

语句功能:改变分配给动态数组的内存空间。

32.自定义函数

1)用DEF定义的自定义函数:(单行和多行)

DEF <函数标识符>[(<形式参数表>)]=<表达式>

DEF <函数标识符>[(<形式参数表>)]
    <函数体>
    <函数标识符>=<表达式>
END DEF

2)用FUNCTION定义的自定义函数

FUNCTION <函数名>[(<形式参数表>)][STATIC]
    <函数体>
    [EXIT FUNCTION]
    <函数名>=<表达式>
END FUNCTION

STATIC 是可选项,指定本函数的所有局部变量是否为“静态”。所谓“静态”,是指局部变量在两次调用之间的值保持不变。若这个可选项被选用,则函数的局部变量在第一次结束时的值将保持存在到第二次这个函数被调用时;否则,调用函数时,局部变量初始化为0或空字符串

3)调用模块化函数语句的一般格式如下:DECLARE <函数名> [(<形式参数表>)]

33.子程序

1)模块内子程序

GOSUB <行号或标号>
RETURN

【1】GOSUB(Goto Subroutine)是语句定义符,意为“转到子程序”执行。

【2】标号为要转入的子程序的开始位置,即子程序的入口。

【3】由GOSUB 语句调用子程序,在子程序中通过RETURN 语句返回,执行GOSUB 语句的下一条语句。

2)独立模块子程序

SUB <子程序名> [(<形式参数表>)][STATIC]
    <语句组>
    [EXIT SUB]
END SUB

两种调用方法:(1)CALL <子程序名>[(<实在参数表>)];(2)<子程序名>[实在参数表]

【1】<实在参数表>又称为实参,可以是传递给SUB 子程序的常量、变量或者表达式,各参数之间用逗号分隔。

【2】如果使用第一种方法,省略关键字CALL 的同时,<实在参数表>外面的圆括号也要一同省略。

34.变量的作用域

1)局部变量:每一个模块,包括主程序、SUB 子程序和FUNCTION 函数中的变量,如果不作特别声明,都只在本模块中有效

2)全局变量:全局变量是指在程序所有模块中都有效的变量。这类变量的名字在整个程序中是惟一的,它的有效范围是整个程序,包括主程序、所有的子程序和模块函数。将变量定义为全局变量时,可以使用下列格式之一:(1)COMMON SHARED <变量表>;(2)DIM SHARED <变量表>

3)共享变量:共享变量是一种特殊变量,既可以在子程序中使用主程序的同名变量,也可以把子程序中。变量的值带给主程序的同名变量。用法:SHARED <变量表>

35.参数传递

1)值传递:这种参数传递方式是单方向进行的,只能将实参的值传递给对应的形参,而不能将处理后形参的值再传递回实参。如果实参为常量或表达式,一般采用值传递方式。如果实参为常量,则直接进行传递;如果实参为表达式,则先计算出表达式的值,再进行参数的传递。

2)地址传递:这种传递方式不是将实参的值传递给形参,而是将存放实参的存储单元的地址传递给形参,因此形参和实参有相同的地址。这种传递是双向的。如果实参为变量,包括数值型变量、字符型变量和数组,默认采用地址传递方式。

36.顺序存取方式和随机存取方式

1)顺序存取方式:

【1】存数据:打开一个新的数据文件后,记录指针自动指向第一条记录。存入一条记录后,指针自动指向第二条记录。以此类推,存入一个记录后,指针自动指向下一条记录,按记录的顺序存入各种数据,存储完毕后关闭该数据文件。

【2】取数据:打开一个数据文件,记录指针自动指向第一条记录,读取第一条记录后,指针自动指向第二条记录。以此类推,读取一条记录后,指针自动指向下一条记录,一条条地读取记录,读完后关闭该数据文件这种按顺序存取方式工作的数据文件称为顺序文件

2)随机存取方式:

用随机存取方式存取数据时,要求数据文件中每条记录有相同的长度,每条记录内有相同的字段,以便于计算出记录的位置。打开数据文件后,可以将一个数据记录按指定的记录号存入文件中,也可以将指定记录号的记录从文件中取出,而不必像顺序存取方式那样,一定要从第一条记录开始存取。这种按随机存取方式工作的数据文件称为随机文件。

37.顺序文件

1)建立/打开:OPEN <文件名> FOR <方式> AS [#]<文件号>

【1】<文件名> 指定要建立或打开的数据文件名,它可以包含盘符和路径。

【2】<方式> 指定顺序文件的使用方式,有以下几种选择。OUTPUT:用于将数据存入顺序文件。用该方式打开顺序文件时,记录指针指向第一条记录,新存储的数据将把原有的数据删除。INPUT:用于从顺序文件提取数据。用该方式打开顺序文件时,记录指针指向第一条记录。APPEND:用于将数据追加入顺序文件。用该方式打开顺序文件时,记录指针指向文件尾,再输入数据记录时,新的记录就续写在原文件的后边,原存储的数据不变。

【3】<文件号> 是一个整型表达式,范围可以从1~255,前面一般加上符号#。执行OPEN命令时,每一个数据文件都被赋予一个文件号,输入/输出语句就是通过文件号与该文件发生联系。

2)关闭:CLOSE [#]<文件号>[,#文件号 ...]

3)存储数据:PRINT #<文件号>,[表达式表]

【1】<文件号> 指定一个打开的顺序文件号。

【2】若缺省[表达式表],则在顺序文件中写入一空行。若选择该选项,则将指定表达式的值存入顺序文件。各表达式之间可以用逗号“,”或分号“;”分隔。如果用“;”分隔,则数据以紧凑格式存入数据文件中。如果用“,”分隔,则数据以标准格式存入数据文件中。以紧凑格式保存数据时,数值型数据间有一个空格,而字符型数据间无空格。对于字符型数据,由于相互之间没有分隔符,容易产生错误。以标准格式保存数据时,字符串间有空格,但没有分隔符,读数据时容易产生错误,而且浪费磁盘空间。

4)存储数据:WRITE #<文件号>,[表达式表]

【1】<文件号> 指定一个打开的顺序文件号。

【2】若缺省[表达式表],则在顺序文件中写入一空行。若选择该选项,则将指定表达式的值存入顺序文件。各表达式之间可以用“,”分隔。一个表达式就是一个字段。

【3】每条记录都自动用回车符和换行符(CHR$(13)和CHR$(10))作为结束。也就是说,输出到文件的每条记录后面都附加了回车符和换行符,使记录在原长度的基础上增加了2 个字节。

【4】全部记录写入文件后,将自动在最后附加一个文件结束符号CHR$(26),以标识文件的结束。

【5】从数据文件读取数据时,将以CHR$(13)和CHR$(10)作为一个记录结束的标记,以CHR$(26)作为文件结束的标记。

5)读取数据:INPUT # <文件号>,<变量名表>

【1】<文件号> 指一个打开的顺序文件号。

【2】<变量名表> 指从打开的顺序文件中读取一个或多个变量名,各变量名之间用“,”来分隔。变量表中各变量的类型必须和原顺序文件中对应的各字段类型保持一致,变量的名字可以和原顺序文件中对应的字段名不同。

【3】使用INPUT#语句读取数据时,常常会用到以下两个函数。

38.两个函数:EOF和LOF

1)EOF函数:EOF(<文件号>)

测试文件号所联系的数据文件是否已经结束。当记录指针到达文件结束位置时,该函数的值为真(-1),否则值为假(0)。

2)LOF函数:LOF(<文件号>)

用于得到文件号所指数据文件中写入或读出的字节数。

39.随机文件

1)建立/打开:OPEN <文件名> [FOR RANDOM] AS [#]<文件号> LEN=<记录长度>

【1】无论是否缺省FOR RANDOM 选项,都表示建立或打开一个随机文件。

【2】LEN = <记录长度> 用来设置随机文件中每条记录的长度,其中 <记录长度> 是一个整型表达式。

2)用FIELD语句定义缓冲区中的字段:FIELD [#]<文件号>,<字段宽度1> AS <字段名1> [,<字段宽度2> AS <字段名2>...]

【1】<字段名> 是一个字符串变量,每一个字段有一个字段名,字段名不能与程序中其他字符串变量同名。

【2】<字段宽度> 的单位是字节,表示一个字段中字符的总数目。

【3】用FIELD 语句定义的各字段的长度之和不能超过OPEN 语句指定的记录长度。

【4】文件一旦关闭,该文件的记录缓冲区释放。因此,每次打开文件时,都需要重新定义。

在随机文件的记录中,各字段存放的是字符型数据。如果需要使用数值型数据,则可以先把它转换成字符型进行存储。读取数据时,再将字符型数据转换成数值型数据。

2)存储和读取

存储步骤如下:

① 用OPEN 语句创建指定文件名的随机文件。
② 用FIELD 定义数据记录并分配数据存取缓冲区。
③ 把记录中的部分数值变量用MKI、MKL、MKS、MKD等函数转换成字符串变量。
④ 用LSET 或RSET 填充数据存取缓冲区。
⑤ 用PUT 语句把缓冲区的内容写入文件。

【1】MKI函数返回一个2B 字符串,MKL函数返回一个4B 字符串,MKS函数返回一个4B 字符串,MKD函数返回一个8B 字符串。

【2】缓冲区中的字段赋值语句:(1)LSET <字段名> = <字符串表达式> (2)RSET <字段名> = <字符串表达式>

这两句可以把字符串表达式的值赋给随机文件缓冲区中的字段,以便用PUT 语句写入磁盘。<字段名> 指在FIELD 语句中定义的随机文件的字段名。LSET 语句将一个字符串赋给缓冲区中的一个字段时,字符串左对齐;RSET 语句将一个字符串赋给缓冲区中的一个字段时,字符串右对齐。

【3】PUT语句的用法:PUT [#] <文件号> [记录号]

<文件号> 指打开的随机文件的编号,前面可以加上#。[记录号] 指将要写入的记录编号。若缺省,则表示记录指针所指向刚写过的记录的下一条。

读取步骤如下:

① 用OPEN 语句打开指定文件名的随机文件。
② 用FIELD 语句定义数据记录并分配数据存取缓冲区。
③ 用GET 语句读入一个记录放入数据缓冲区。
④ 记录中若有原属于数值型的数据,用CVI、CVL、CVS、CVD 函数将字符型数据还原为数值型数据。

【1】GET语句的用法:GET [#] <文件号> [记录号]

<文件号> 指打开的随机文件的编号,前面可以加上#。[记录号] 指随机文件中将要读取记录的编号。若缺省,则表示读取当前记录指针所指的记录,也就是刚刚读过的记录的下一条

【2】把字符型数据还原为数值型数据,用到下面四个函数:CVI函数返回一个整型数值,CVL函数返回一个长整型数值,CVS函数返回一个单精度数值,CVD函数返回一个双精度数值。

40.二进制文件

1)建立和打开:OPEN <文件名> FOR BINARY AS [#]<文件号>

2)读取数据、写入数据:GET/PUT #<n>[, 位置变量], <数据变量>

【1】#<n> 指定打开文件的文件号

【2】[位置变量] 是整型表达式,表示存入文件的数据的开始位置。文件的第一个字节存入位置为1,第二个位置为2

【3】<数据变量> 可以为除数组变量以外的任何变量,变量类型决定了一次输出文件的字节数。如果变量是整数型,那么一次输出为2B,位置向后移动2B

3)文件指针定位

【1】SEEK语句:SEEK #<n>,<位置变量>

移动文件指针到位置变量所表示的字节处,为下一步操作做准备。#<n>和 <位置变量>的含义与上述GET/PUT 语句相同。

【2】SEEK函数:SEEK <n>

返回下一次要读写的字节位置。<n>含义与上述GET/PUT 语句相同。

【3】LOC函数:LOC <n>

返回最近一次读过或写过的字节位置。<n>含义与上述GET/PUT 语句相同。

END

转载于:https://my.oschina.net/Tsybius2014/blog/363347

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Ubuntu上安装qBittorrent,您可以使用以下命令之一: 1. 安装稳定版:首先,您需要添加qBittorrent稳定版PPA存储库,然后更新软件包列表并安装qBittorrent。请运行以下命令: ``` sudo add-apt-repository ppa:hydr0g3n/qbittorrent-stable sudo apt update && sudo apt install qbittorrent ``` 这将安装最新的稳定版本的qBittorrent。 2. 安装指定版本:如果您想要安装特定版本的qBittorrent,您可以使用以下命令来安装指定版本的qBittorrent: ``` sudo apt install qbittorrent=4.2.0~201903071223-6572-ccd8f3e~ubuntu16.04.1 ``` 或者,如果您想要安装没有图形界面的版本,您可以运行以下命令: ``` sudo apt install qbittorrent-nox=4.2.0~201903071223-6572-ccd8f3e~ubuntu16.04.1 ``` 这将安装该特定版本的qBittorrent。 请根据您的需求选择其中一种方法进行安装。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Ubuntu安装Qbittorrent并开启WEB服务[桌面版/服务器版]](https://blog.csdn.net/weixin_39790877/article/details/119228771)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [Ubuntu安装qBittorrent](https://blog.csdn.net/weixin_30553837/article/details/95271901)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值