读取行的样例代码

下面的样本代码应该在编辑窗口的命令模式下键入,而不是在文件输入/输出对话框中。

请看一下此例,它每次从数据文件中读取一行,直至 FILE/READ_LINE 命令遇到空行。然后测量程序会显示得到的文本块并退出。

V1=文件/存在,test.txt

如果/V1<>0

注释/操作者,可以读取数据文件。单击“确定”继续。

ASSIGN/V3=""

FPTR=文件/打开,D:\Program Files\pcdmis35\test.txt,读取

执行/

V2=文件/读取行,FPTR,{LINE}

ASSIGN/V3=V3+LINE

注释/操作者,"变量 V3 的当前值为:

,V3

UNTIL/V2 == "EOF"

文件/关闭,FPTR

注释/操作者,"文本块显示如下:"

,V3

END_IF/

ELSE/

COMMENT/OPER, 不能读取数据文件。现在将退出例程。

转到/终止

END_ELSEIF/

终止=标号/

ROUTINE/END

代码说明

该代码大部分与“读取字符的样例代码”中所述类似。下面仅介绍该示例独有的代码。

DO
该行开始 DO / UNTIL 循环。该行绑定文件/读取行代码,以便可以一次一行连续读入行。循环在到达文件结尾时退出。

V2=文件/读取行, FPTR,{行}
该行命令读取文件中的一行。该命令不是将文本内容保存在V2中,它与文件/读取字符有区别。

ASSIGN/V3=V3+LINE
该行使用空的 V3 变量将字符串 V3 LINE 串联,然后将串联后的值重新赋给 V3。所以,在以后运行 DO/UNTIL 循环时,V3 将增加一行。

UNTIL/V2 == "EOF"
此行测试 DO / UNTIL 循环的条件。在 FILE/READLINE 代码到达文件末尾时退出循环。例程流退出循环后,其余代码结束运行,并在操作员注释里面显示完整的代码块。

Result = File/ReadLine,F1, "Part ID :" + {V1} - 让所有文本显示在文本“零件 ID:”后的读取行中:被指定为 V1。将 F1 用作文件指针名称在打开的文件中读取该行。读取的结果(成功或失败)会存储在变量结果中。

File/ReadLine,F1,"位置:"+{VARX}+","+{VARY}+","+{VARZ}+","+{VARI}+","+{VARJ}+","+{VARK}

ASSIGN/CIR1.XYZ=MPOINT(VARX,VARY,VARZ)

ASSIGN/CIR1.IJK=MPOINT(VARI,VARJ,VARK)

上述三个命令行读取字符串 "Location:" 后用逗号分隔的文本并存储 X, Y, Z 中的值及 CIR1 的 I, J, K 值。

File/ReadLine,F1, "Value # " + loopvar + " : " + {var2} - 将使用冒号之后出现的文本填充 var2。此示例中的 loopvar 变量不带大括号,因此属于分隔文本。

前缀是零的数字处理的样例代码

如果您读取的读取的文件包含数行,您讲注意到PC-DMIS忽略了在前面为零的字符。例如,如果行包含了005450,它将严格作为数字来读取值并且返回数值5450,忽略前面的两个零。您可能要或者不要这两个零。

建议您创建一个外部条形码文本文件来读软件和它包含的这两行数据

290291143;582750;0010

291143;5827;0010

您可以使用一些以下样例代码来得到在分号之间的数值:

赋值/第一_值=0

赋值/第二_值=0

赋值/第三_值=0

赋值/LINENUM=1

FPTR=FILE/OPEN,D:\TEMP\CODES.TXT,READ

执行/

INLINE=FILE/READLINE,FPTR,{FIRST_VALUE}+";"+{SECOND_VALUE}+";"+{THIRD_VALUE}

COMMENT/OPER,NO,"LINE NUMBER: "+LINENUM

,"第一个值: "+FIRST_VALUE

,"第二个值: "+SECOND_VALUE

,"第三个值: "+THIRD_VALUE

UNTIL/INLINE=="EOF"

文件/关闭,FPTR,保留

当成功的分析文本的行并且返回到数值,同时也将移除所有数值前缀零后返回。因此,第三_值变量包含了10的值来代替0010.

保留前缀零,您需要把全部行排成一列,在包含数值的文本行利用INDEX,LEFT和MID使用排成一列功能查找分号位置取代。

FPTR=FILE/OPEN,D:\TEMP\CODES.TXT,READ

赋值/LINENUM=1

执行/

LINESTATUS=FILE/READLINE,FPTR,{LINESTR}

ASSIGN/LINESTR=STR(LINESTR)

ASSIGN/FIRST_INDEX=INDEX(LINESTR,";")

ASSIGN/FIRST_VALUE=STR(LEFT(LINESTR,FIRST_INDEX-1))

ASSIGN/REMAINSTR=STR(MID(LINESTR,(FIRST_INDEX)))

ASSIGN/SECOND_INDEX=INDEX(REMAINSTR,";")

ASSIGN/SECOND_VALUE=STR(LEFT(REMAINSTR,SECOND_INDEX-1))

ASSIGN/THIRD_VALUE=STR(MID(REMAINSTR,SECOND_INDEX))

COMMENT/OPER,NO,"LINE NUMBER: "+LINENUM

,"第一个值: "+FIRST_VALUE

,"第二个值: "+SECOND_VALUE

,"第三个值: "+THIRD_VALUE

赋值/LINENUM=LINENUM+1

UNTIL/LINESTATUS=="EOF"

文件/关闭,FPTR,保留

代码说明

该代码大部分与文件复制的样例代码中所述类似。下面仅介绍该示例独有的代码。

ASSIGN/FIRST_INDEX=INDEX (LINESTR,";")
此行定位代码行中第一个分号的位置,并将该位置分配给变量 FIRST_INDEX

ASSIGN/FIRST_VALUE=STR(LEFT(LINESTR,FIRST_INDEX-1))
此行为 FIRST_VALUE 变量分配 LINESTR 变量中第一个分号前(但不包括第一个分号)的字符字符串。LINESTR 包含整行文本。

ASSIGN/REMAINSTR=STR(MID(LINESTR,(FIRST_INDEX)))
此行为变量 REMAINSTR(表示“其余字符串”的意思)分配从 FIRST_INDEX 位置(第一个分号位置)开始至该行结束以外的字符字符串。

ASSIGN/SECOND_INDEX=INDEX(REMAINSTR,";")
此行在 REMAINSTR 变量中搜索另外一个分号(行中第二个分号)并将此位置分配给变量 SECOND_INDEX

ASSIGN/SECOND_VALUE=STR(LEFT(REMAINSTR,SECOND_INDEX-1))
此行为 SECOND_VALUE 变量分配 REMAINSTR(整行中的第二个分号)变量中第一个分号前(但不包括第一个分号)的字符字符串。

ASSIGN/THIRD_VALUE=STR(MID(REMAINSTR,SECOND_INDEX))
此行为变量 THIRD_VALUE 分配从 SECOND_INDEX 位置开始至该行结束的字符字符串。