主要内容

用TLC读取记录文件

教程概述

摘要目的:了解记录文件的结构,并学习如何使用TLC指令解析它们。

文件夹:matlabroot/工具箱/ rtw / rtwdemos tlctutorial /指南开放

在本教程中,您将使用一系列TLC脚本解释一个简单的结构化记录文件。您将了解记录是如何构造的,以及TLC如何构造%分配而且% < >令牌扩张指令用于处理它们。此外,本教程还演示了使用% foreach,以及范围使用%,

本教程包括以下步骤,你应该按顺序执行:

  1. 记录文件结构-一些背景和一个简单的例子

  2. 解释记录—显示记录文件的内容

  3. TLC脚本的解剖-解构演讲

  4. 修改read-guide.tlc- TLC实验

  5. 传递并使用一个参数—从命令行传递参数到TLC文件

  6. 审查

记录文件结构

代码生成器将模型编译成一种称为记录文件的结构化形式,称为模型.rtw.这样编译的模型文件在语法和组织上与源模型文件相似,因为它们包含一系列层次结构上嵌套的表单记录

recordName {itemName itemValue}

项目名称按字母顺序排列。项目值可以是字符串或数字。数值可以是标量、向量或矩阵。花括号分隔了每个记录的内容,其中可能包含一个或多个项目,由空格、制表符或返回字符分隔。

在一个模型.rtw文件中,顶级(第一个)记录的名称为CompiledModel.每个块由其中的子记录表示,子记录由块的名称标识。TLC可以解析格式良好的记录文件,如本练习所示。

下面的清单是TLC可以解析的有效记录文件,尽管它不能为其生成代码。注释用#表示:

文件:指南。rtw说明性的记录文件,不能被Simulink使用#注意:字符串值必须在引号中Top{#最外层的记录,称为金宝appTop日期“21- 8 -2008”#名称/值对命名为Top。日期员工{ # Nested record within the Top record FirstName "Arthur" # Alpha field Top.Employee.FirstName LastName "Dent" # Alpha field Top.Employee.LastName Overhead 1.78 # Numeric field Top.Employee.Overhead PayRate 11.50 # Numeric field Top.Employee.PayRate GrossRate 0.0 # Numeric Field Top.Employee.GrossRate } # End of Employee record NumProject 3 # Indicates length of following list Project { # First list item, called Top.Project[0] Name "Tea" # Alpha field Name, Top.Project[0].Name Difficulty 3 # Numeric field Top.Project[0].Difficulty } # End of first list item Project { # Second list item, called Top.Project[1] Name "Gillian" # Alpha field Name, Top.Project[1].Name Difficulty 8 # Numeric field Top.Project[1].Difficulty } # End of second list item Project { # Third list item, called Top.Project[2] Name "Zaphod" # Alpha field Name, Top.Project[2].Name Difficulty 10 # Numeric field Top.Project[2].Difficulty } # End of third list item } # End of Top record and of file

只要程序员知道记录和字段的名称,以及它们的预期内容,他们就可以组成TLC语句来读取、解析和操作记录文件数据。

解释记录

下面是一个TLC程序脚本的输出guide.rtw,解释其记录,操作现场数据,并格式化描述,这些都是指向MATLAB®命令窗口:

使用TLC,您可以:*直接访问字段的值,例如%——计算为:"21-Aug-2008" * Assign contents of a field to a variable, e.g. "%assign worker = Top.Employee.FirstName" worker expands to Top.Employee.FirstName = "Arthur" * Concatenate string values, e.g. "%assign worker = worker + " " + Top.Employee.LastName" worker expands to worker + " " + Top.Employee.LastName = "Arthur Dent" * Perform arithmetic operations, e.g. "%assign wageCost = Top.Employee.PayRate * Top.Employee.Overhead" wageCost expands to Top.Employee.PayRate * Top.Employee.Overhead <- 11.5 * 1.78 = 20.47 * Put variables into a field, e.g. Top.Employee.GrossRate starts at 0.0 "%assign Top.Employee.GrossRate = wageCost" Top.Employee.GrossRate expands to wageCost = 20.47 * Index lists of values, e.g. "%assign projects = Top.Project[0].Name + ", " + Top.Project[1].Name..." "+ ", " + Top.Project[2].Name" projects expands to Top.Project[0].Name + ", " + Top.Project[1].Name + ", " + Top.Project[2].Name = Tea, Gillian, Zaphod * Traverse and manipulate list data via loops, e.g. - At top of Loop, Project = Tea; Difficulty = 3 - Bottom of Loop, i = 0; diffSum = 3.0 - At top of Loop, Project = Gillian; Difficulty = 8 - Bottom of Loop, i = 1; diffSum = 11.0 - At top of Loop, Project = Zaphod; Difficulty = 10 - Bottom of Loop, i = 2; diffSum = 21.0 Average Project Difficulty expands to diffSum / Top.NumProject = 21.0 / 3 = 7.0

这个输出来自guide.rtw是通过调用TLC从MATLAB命令窗口,执行脚本称为read-guide.tlc.现在就自己做吧,按照下面的步骤:

  1. 在MATLAB中,更改文件夹(cd)转到你的副本tlctutorial /指南在工作文件夹中。

  2. 为了产生刚刚列出的输出,处理guide.rtwTLC脚本read-guide.tlc输入以下命令:

    TLC -v -r指南。rtw read-guide。tlc

注意命令用法:

  • - rSwitch(用于读)在本例中标识输入数据文件guide.rtw

  • 处理数据文件的TLC脚本由最后键入的令牌指定。

  • - vswitch (verbose)将输出导向命令窗口,除非TLC文件自己处理这个。

TLC脚本的解剖

现在您将分析刚才运行的脚本。每个“段落”的输出guide.tlc在以下简短的部分中依次讨论:

代码编写约定

以下是一些基本的TLC语法和编码约定:

% %的评论 TLC注释,它不是输出
/*注释*/ 注释,用于输出
%的关键字 TLC指令(关键字),以“
% < expr > TLC令牌运算符
(期) 范围操作符,例如,Top.Lev2.Lev3
...(行尾) 语句延续(不输出换行符)
(行尾) 语句延续(输出换行符)
localvarIdentifier 局部变量以小写字母开头
GlobalvarIdentifier 全局变量以大写字母开头
RecordIdentifier 记录标识符以大写开始
存在() TLC内置函数以大写字母命名
注意:TLC标识符区分大小写。

有关详细信息,请参见TLC编码约定

文件头

该文件read-guide.tlc开始于:

文件:read-guide。tlc(这一行是tlc注释,不会打印)%% %%要执行此文件,键入:tlc -v -r guide。rtw read-guide.tlc%%Set format for displaying real values (default is "EXPONENTIAL") %realformat "CONCISE"
  • 第1行到第4行—字符后面的一行文本%%作为注释处理(忽略,不解释或输出)。

  • 第5行-正如第四行文本中所解释的,是TLC指令(关键字)% realformat,它控制在输出中显示后续浮点数时的格式。这里我们想要最小化显示的数字。

令牌扩张

输出的第一部分由脚本行生成:

使用TLC,您可以:*直接访问字段的值,例如%assign td = "%" + "" %——计算为:"%
  • 第1行和第2行-(以及不包含TLC指令或标记的行)被简单地回显到输出流,包括前导和尾随空格。

  • 第3行—创建一个名为道明并为字符串赋值% <最高。日期>到它。的%分配指令创建新变量并修改现有变量。它的一般语法是:

    %assign::variable =表达式
    可选的双冒号前缀指定被赋值的变量是全局变量。如果没有TLC, TLC将在当前作用域中创建或修改局部变量。

  • 第4行-显示

    % <最高。日期>-- evaluates to:
    上一行允许TLC打印% <最高。日期>没有扩张。它通过粘贴两个字面量来构造字符串。
    %assign td = "%" + "<顶部。约会>”
    如在字符串处理附加,加号运算符将字符串连接为数字、向量、矩阵和记录。

  • 第5行-计算(展开)记录上面。日期.更准确地说,它计算字段日期存在于范围内.的语法% < expr >导致表达expr(可以是一条记录、一个变量或一个函数)来求值。这种操作有时被称为eval

请注意

不能嵌套% < expr >算子(即,% < foo % <吧> >是不允许的)。

请注意

当你使用% < expr >引号中的运算符,例如“% <最高。约会>”, TLC展开表达式,然后将结果括在引号中。然而,将%分配例如,在引号内,"%assign foo = 3",只是将引号括起来的语句回显到输出流。没有赋值结果(值喷火保持不变或未定义)。

一般作业

输出的第二部分由脚本行产生:

*将一个字段的内容分配给一个变量,例如% Assign worker = Top.Employee. firstname "% Assign worker = Top.Employee。FirstName"员工展开到Top.Employee.FirstName = %<员工>
  • 第1行-回显到输出。

  • 第2行-字段的赋值FirstName上面。员工将作用域记录到名为工人

  • 第3行—重复前面的语句,用引号括起输出。

  • 第4行-解释下面的赋值并说明令牌扩展。令牌% <工作>扩大到亚瑟

字符串处理附加

脚本的下一节演示了字符串连接,这是“+"操作符:

*串联字符串值,例如%assign worker = worker + " " + Top.Employee. lastname "%assign worker = worker + " " + Top.Employee。LastName"员工扩展到员工+ " " + Top.Employee.LastName = "%<员工>"
  • 第1行-回显到输出。

  • 第2行-执行连接。

  • 第3行-回显第2行到输出。

  • 第4行-描述操作,其中变量连接到由空格字符分隔的字段。的另一种方法是不使用+运营商是

    %assign worker = "% %"
    另一种方法使用字段的求值,同样有效。

+运算符是关联的,也适用于数字类型、向量、矩阵和记录:

  • 数字类型-将两个表达式加在一起;两个操作数都必须是数字。例如:

    *数字类型示例,例如Top.Employee. payrate = % Top.Employee. overhead = %分配td = Top.Employee.PayRate + Top.Employee.GrossRate td = Top.Employee.PayRate + Top.Employee.Overhead td计算为%
    输出:
    *数值类型示例,例如Top.Employee.PayRate = 11.5 Top.Employee.Overhead = 1.78 td = Top.Employee.PayRate + Top.Employee.Overhead td计算为13.28

  • 向量——如果第一个参数是一个向量,第二个参数是一个标量值,TLC将标量值附加到向量。例如:

    *向量示例,例如%assign v1 = [0,1,2,3] v1 is % %assign tp1d = Top.Project[1]。困难Top.Project[1]。难度% %分配v2 = v1 + tp1d v2 = v1 + Top.Project[1]。难度v2计算为:%
    输出:
    *矢量示例,例如v1是[0,1,2,3]难度为8 v2 = v1 + Top.Project[1]。难度v2计算为:[0,1,2,3,8]

  • 矩阵——如果第一个参数是一个矩阵,第二个参数是一个与矩阵列宽相同的向量,TLC将该向量作为另一行追加到矩阵。例如:

    *矩阵示例,例如%assign mx1 = [[4,5,6,7];[8,9,10,11]] mx1 is % v1 is % %assign mx = mx1 + v1 mx = mx1 + v1 mx求值为%
    输出:
    *矩阵示例,例如mx1是[[4,5,6,7];[8,9,10,11]] v1 = [0,1,2,3] mx = mx1 + v1 mx = [[4,5,6,7];[8,9,10,11];[0,1,2,3]]

  • 记录——如果第一个参数是一条记录,TLC会添加第二个参数作为参数标识符(带有其当前值)。例如:

    *记录示例,例如%assign StartDate = "August 28, 2008" StartDate is % %assign tsd = Top + StartDate Top + StartDate Top。StartDate的值为%
    输出:
    *记录示例,例如StartDate is August 28, 2008 Top + StartDate Top。StartDate计算到2008年8月28日

算术运算

TLC为数值数据提供了完整的算术运算符。在我们的TLC脚本的下一部分中,两个数值字段相乘:

*执行算术运算,例如:%assign wageCost = Top.Employee. payrate * Top.Employee. overhead "%assign wageCost = Top.Employee. payrate * Top.Employee. overhead "“工资成本”扩展到Top.Employee.PayRate * Top.Employee.Overhead…< - - - - - - % < Top.Employee。PayRate> * %<顶级员工。开销> = %<工资成本>
  • 第1行-回显到输出。

  • 2号线—%分配语句,用于计算TLC存储在局部变量中的值wageCost

  • 第3行-重复第2行的操作。

  • 第4行和第5行-组成一个单一的语句。省略号(键入为三个连续的句号,例如,...)表示语句在下一行继续,但如果语句有输出,TLC不会插入换行符。要继续语句并插入换行符,请将省略号替换为反斜杠().

修改记录

一旦读入内存,就可以修改和操作记录,就像通过赋值创建变量一样。下一部分read-guide.tlc替换记录字段的值Top.Employee.GrossRate

*将变量放入一个字段中,例如%assign Top.Employee.GrossRate = wageCost" %assign Top.Employee.GrossRate = wageCost" Top.Employee.GrossRate展开为wageCost = %

对记录的这种更改是非持久性的(因为记录文件是TLC的输入;其他文件类型,如C源代码,是输出),但可能是有用的。

除此之外,您还可以使用多个TLC指令%分配修改记录:

% createrecord 创建新的顶级记录,还可以在其中指定子记录,包括名称/值对。
% addtorecord 向现有记录添加字段。新字段可以是名称/值对,也可以是现有记录的别名。
% mergerecord 组合一个或多个记录。第一条记录按顺序包含它本身以及命令指定的其他记录内容的副本。
% copyrecord 创建一个新记录为% createrecord,除非记录的组件来自您指定的现有记录。
% undef var 删除(删除)var(变量或记录)。如果var是记录中的字段,TLC从记录中删除该字段。如果var为记录数组(列表),TLC删除数组的第一个元素;其余的元素仍然可以访问。只能删除使用创建的记录% createrecord% copyrecord

看到目标语言编译器指令有关这些指令的详细信息。

指数列表

记录文件可以包含具有相同标识符的列表或记录序列。我们的示例包含三个记录的列表,标识为项目范围。列表引用被索引,按照它们在记录文件中出现的顺序从0开始编号。下面是TLC代码,用于编译名字字段项目列表:

*值的索引列表,例如%assign projects = Top.Project[0]。名称+ "," + Top.Project[1].Name…+ ", " + Top.Project[2]。名字%assign projects = Top.Project[0]。名称+“,”+ Top.Project[1]。名字..." "+ ", " + Top.Project[2].Name" projects expands to Top.Project[0].Name + ", " + Top.Project[1].Name + ", " + Top.Project[2].Name = %

Scope.Record [n] .Field语法类似于C语言中用来引用结构数组中的元素的语法。

虽然显式索引(如上面所示)是完全可以接受的,但在遍历整个列表时,通常更可取的方法是使用循环构造,如循环遍历列表

循环遍历列表

按照惯例,记录文件中列表所占用的部分前面有一条记录,指示列表元素的数量。在模型.rtw文件,这样的参数被声明为全国矿工工会鉴别,在那里鉴别用于下面列表中的记录的标识符。在guide.rtw,项目列表如下所示:

NumProject 3 #表示下面列表的长度Project{#第一个列表项,称为Top。项目[0]名称“Tea”# Alpha字段名称,top .项目[0]。名称难度3 #数字字段Top.Project[0]。{#第一个列表项结束项目{#第二个列表项,称为Top。项目[1]名称“Gillian”# Alpha字段名称,top .项目[1]。名称难度8 #数字字段Top.Project[1]。项目{#第三个列表项,称为Top。项目[2]名称“赞福德”# Alpha字段名称,top .项目[2]。名称难度10 #数字字段Top.Project[2]。难度}#第三个列表项目结束

因此,的价值NumProject描述有多少项目记录发生。

请注意

model.rtw文件还可能包含以全国矿工工会但不是列表大小的参数。TLC不要求列表大小参数从全国矿工工会.因此,口译时要小心全国矿工工会鉴别记录标识符。内置TLC功能尺寸()可以确定指定范围内的记录数量,从而确定列表的长度。

最后一部分read-guide.tlc使用一个% foreach循环,由NumProject参数来迭代项目列出并操作其值。

*通过循环遍历和操作列表数据,例如%assign diffSum = 0.0 %foreach i = Top。NumProject -在循环的顶部,项目= %< top .Project[i].Name>;困难=…% < Top.Project[我]。难度> %分配diffSum = diffSum + Top.Project[i]。难度-循环底部,i = %;diffSum = % %endforeach %assign avgDiff = diffSum / Top。平均项目难度扩展为diffSum / Top。NumProject = %…/ % <。全国矿工工会项目> = %

你可能还记得,TLC输出是这样的:

*遍历和操作列表数据通过循环,例如-在循环的顶部,项目=茶;难度= 3 -循环底部,i = 0;diffSum = 3.0 -在循环的顶部,项目= Gillian;难度= 8 -循环底部,i = 1;diffSum = 11.0 -在循环的顶部,项目= Zaphod;难度= 10 -循环底部,i = 2;diffSum = 21.0平均项目难度扩展为diffSum / Top。NumProjects = 21.0 / 3 = 7.0
在初始化求和变量之后diffSum,一个% foreach输入循环,带变量声明为循环计数器,迭代到NumProject.循环的范围是遇到的所有语句,直到对应的% endforeach达到(% foreach循环可以是嵌套的)。

请注意

循环迭代隐式地从0开始,范围比指定上限的索引小1。循环索引是循环体的局部索引。

修改read-guide.tlc

既然你已经学习了read-guide.tlc,是时候修改它了。本练习介绍了两个重要的薄层色谱设施,文件控制而且范围控制.类中实现这两个read-guide.tlc脚本。

文件控制基础知识

TLC脚本几乎总是以字符流的形式产生输出。输出通常指向一个或多个缓冲区和文件,它们统称为.到目前为止,您已经从read-guide.tlc到MATLAB命令窗口,因为您包含了- v打开命令行。通过省略来证明这一点- v当你奔跑read-guide.tlc.类型

TLC -r指南。rtw read-guide.tlc

似乎什么都没有发生。事实上,脚本被执行了,但是输出被指向一个空设备(有时称为“位桶”)。

有一个活动输出文件,即使它是空的。要指定、打开和关闭文件,使用以下TLC指令:

%openfile streamamid ="filename", "mode" %closefile streamamid %selectfile streamamid

如果不指定文件名,则后续输出流到命名为的内存缓冲区streamid.如果没有指定模式,TLC将打开文件进行写入并删除任何现有内容(受制于系统级文件保护机制)。有效的模式标识符为一个(附加)w(写,默认)。把这些字符用引号括起来。

% openfile指令创建一个文件/缓冲区(在w模式),或打开一个现有的一个模式)。注意文件规格要求的等号。可以打开多个流进行写入,但一次只能激活一个流。要切换输出流,请使用% selectfile指令。在使用完文件之前,不需要关闭它们。

默认的输出流,可以使用流ID重新指定NULL_FILE,是.另一个内置流是STDOUT.当使用% selectfileSTDOUT指令输出到MATLAB命令窗口。

请注意

的流NULL_FILE而且STDOUT总是开放的。用% openfile生成错误。使用% selectfile激活它们。

该指令% closefile关闭当前输出文件或缓冲区。直到一个% openfile或者一个% selectfile指令,则输出到先前打开的流(如果不存在,则输出为null)。使用% selectfile指定一条开放的溪流供读或写。在实践中,许多TLC脚本将输出数据写入单独的缓冲区,然后按顺序选择这些缓冲区,并将其内容假脱机存储到一个或多个文件中。

实现输出文件控制

在你的tlctutorial /指南文件夹,找到文件read-guide-file-src.tlc.该文件提供的版本包含注释和添加的三行文本。编辑此文件以实现输出文件控制,如下所示:

  1. 开放read-guide-file-src.tlc在文本编辑器中。

  2. 将文件另存为read-guide-file.tlc

  3. 注意以。开头的五个注释行% % - - - - - - >

    在每个注释下面,插入一个TLC指示。

  4. 另存为read-guide-file.tlc

  5. 执行read-guide-file.tlc使用以下命令:

    TLC -r指南。rtw read-guide-file.tlc

    如果成功,TLC将创建该文件guidetext.txt其中包含预期的输出,MATLAB命令窗口显示

    ***输出被定向到文件:guidetext.txt ***我们几乎完成了…***处理完成。

如果您没有看到这些消息,或者没有生成文本文件,请检查材料并重试。如果问题仍然存在,检查read-guide-file.tlc指导/解决方金宝搏官方网站案子文件夹查看应如何指定文件控件。

范围基本知识

记录文件结构解释记录的层次组织。每条记录都存在于由其嵌套的记录定义的范围内。示例文件,guide.rtw,包含以下作用域:

前顶。员工上面。项目[0]。项目[1]。项目[2]

若要引用字段或记录,请指定其作用域,即使不存在包含该标识符的其他上下文。例如,在guide.rtw,田野FirstName只存在于作用域中上面。员工.你必须把它称为Top.Employee.FirstName无论何时访问它。

当模型显示深度嵌套的作用域时,这可能导致极其冗长且容易出错的标识符。例如:

CompiledModel.BlockOutputs.BlockOutput.ReusedBlockOutput

此标识符的范围很长,并且具有类似的项目名称,您很容易输入错误。

%和% endwith指令减轻了编写TLC脚本的负担,并阐明了它们的控制流程。语法是

%with记录名[TLC语句]%endwith

每一个%,最后是一个% endwith,这些对可能是嵌套的(但不重叠)。如果RecordName位于顶层之下,则不需要在其描述中包括顶层作用域。例如,使当前的范围guide.rtw上面。员工,您可以指定

%with员工[TLC报表]%以

自然地,%与高层。员工也是有效的语法。一旦用括号括起来%和% endwith, TLC语句中的记录标识符不需要指定它们的外部作用域。但需注意以下条件:

  • 您可以访问当前以外的记录%,范围,但必须完全限定它们(例如,使用记录名称和字段)。

  • 对象中的记录赋值时%,指令,你必须完全限定他们。

使用变更范围%,

在本练习的最后一部分中,您将修改TLC脚本%和% endwith指令。方法导致的范围更改,还需要编辑记录标识符名称(但不是本地变量的名称)%,指令。

  1. 打开TLC脚本read-guide-scope-src.tlc在文本编辑器中。

  2. 将文件另存为read-guide-scope.tlc

  3. 注意开始的注释行% % - - - - - - >

    在每个注释下,插入一个TLC指令或修改已经存在的语句。

  4. 另存为read-guide-scope.tlc

  5. 执行read-guide-scope.tlc使用以下命令:

    TLC -v -r指南。rtw read-guide-scope.tlc

输出应该与from完全相同read-guide.tlc,除了您可能通过缩进代码部分而引入的空白%和% endwith或者消去空行。

类中完全指定作用域%,上下文不是错误,它只是不必要的。然而,在将其分配给记录时未能完全指定其范围(例如,%assign GrossRate =工资成本)无效。

如果运行脚本导致错误,请检查上面关于范围的讨论并进行编辑read-guide-scope.tlc消灭它们。作为最后的手段,检查read-guide-scope.tlc/金宝搏官方网站解决方案子文件夹查看在本练习中应该如何处理作用域。

有关其他信息,请参见模型中的作用域。rtw文件而且变量作用域

传递并使用一个参数

可以使用TLC命令和内置函数将参数从命令行传递到正在执行的TLC文件。最常用的命令开关是——一个,它分配任意变量。例如:

TLC -r输入。RTW -avar=1 -afoo="abc" vars.tlc

传递这对字符串的结果——一个与在正在执行的文件中声明和初始化局部变量相同(在这里,vars.tlc).例如:

%assign var = 1 %assign foo = "abc"

您不需要在TLC文件中声明这些变量,当设置为——一个.方法指定未声明的变量,则会导致错误——一个在调用文件时切换。还要注意(相对于- r开关)一个空间不应该分开——一个从您声明的参数。

在本教程的最后一节中,您将使用内置函数GET_COMMAND_SWITCH ()打印在TLC脚本中使用的记录文件的名称,并提供一个参数来控制是否抑制代码。默认情况下,代码将被执行,但如果命令行包含船向一边倾斜的= 0

  1. 打开TLC脚本read-guide-param-src.tlc在文本编辑器中。

  2. 将文件另存为read-guide-param.tlc

  3. 要使您的程序能够从命令行访问输入文件名,请执行以下操作:

    1. 线以下% selectfile STDOUT,加一行:

      = GET_COMMAND_SWITCH ("r")

      %分配指令声明并设置变量。在这个实例中,它包含一个字符串文件名标识符。GET_COMMAND_SWITCH ()返回指定TLC命令开关后面的任何字符串参数。内置函数名必须使用大写。

    2. 换行”***使用recordfile,全文如下:

      ***使用RECORDFILE %
  4. 要控制是否执行一段TLC代码,请执行以下操作:

    1. 线以下"= GET_COMMAND_SWITCH ("r")”,添加:

      %if (!EXISTS(list)) %assign list = 1 %endif
      该程序通过内在(内置)函数检查列表参数是否已声明存在().如果不存在列表变量,程序就赋值一个。这个定义列表默认值为真正的

    2. 将代码行包含在%如果块。

      %if (list) *将一个字段的内容分配给一个变量,例如% Assign worker = FirstName" % Assign worker = FirstName" worker扩展为FirstName = % %endif

      现在是要赋值的代码工人只在什么时候被发送到输出列表真正的

    3. 保存read-guide-param.tlc

  5. 执行read-guide-param.tlc并使用命令检查输出

    TLC -r指南。rtw read-guide-param.tlc

    这个收益率

    ***使用RECORDFILE[指南。将一个字段的内容赋给一个变量。“%assign worker = FirstName”worker扩展到FirstName = Arthur ***END
  6. 执行read-guide-param.tlc使用命令:

    TLC -r指南。RTW -alist=0 read-guide-param.tlc

    船向一边倾斜的= 0开关时,输出只显示开关之外的信息如果声明。

    ***使用RECORDFILE[指南。环球套票)* * *

审查

前面的练习检查了记录文件的结构,并扩展了如何使用TLC指令。以下TLC指令通常用于TLC脚本(参见目标语言编译器指令详细说明):

% addincludepath 启用TLC查找包含的文件。
% addtorecord 向现有记录中添加字段。新字段可以是现有记录的名称/值对或别名。
%分配 创建或修改变量。
% copyrecord 创建新记录,如果适用,在其中指定子记录,包括名称/值对。记录的组件来自指定的现有记录。
% createrecord 创建新的顶级记录,如果适用,在其中指定子记录,包括名称/值对。
% foreach / % endforeach 迭代循环变量,从0到上限。
%如果/ % endif 控制是否执行代码,就像在C中一样。
%包括 将一个文件插入到另一个文件中,就像在C语言中一样。
% mergerecord 合并一个或多个记录。第一条记录按顺序包含它本身以及命令指定的其他记录内容的副本。
% selectfile 直接输出到流或文件。
% undef var 删除(删除)var(变量或记录)。如果var是记录中的字段,TLC从记录中删除该字段。如果var为记录数组(列表),TLC删除数组的第一个元素;其余的元素仍然可以访问。仅通过% createrecord% copyrecord可以删除。
%和% endwith 添加作用域以简化引用块。

相关的话题