所以我有一个想要解释的.txt文件(卓越)。
示例文件:
M48
FMAT,2
ICI,OFF
METRIC,TZ,000.000
T1C1.016
%
G90
M71
T1
X36551Y-569519
X17780Y-589280当我扫描文件时,我分离语句(例如,指标),并将其保存在一个字符串中。在这之后,我想根据这个字符串的值执行代码。
在检测语句时执行命令的最佳实践是什么?
if(String == "METRIC")
{
execute code;
}
else if (String == "M48")
{
execute code;
}
etc.或者类似这样的东西:
switch(String)
{
case: "M48"
execute code;
break;
case: "METRIC"
execute code;
break;
etc.
}或者这两种方法都是错误的,我应该使用不同的方法吗?
我发现了这个:Switch or if statements in writing an interpreter in java他们正在讨论使用地图,我也应该尝试这个吗?如果是这样的话,你能提供一个简单的例子吗?因为我不太理解这种方法。
发布于 2018-10-05 00:13:20
正确的答案取决于许多因素,但从你的帖子的字里行间看,我98%确定你想要的是一个简单的枚举标记器:
enum class Token {
AAA,
BBB,
CCC
};
// Trivially implementable as a if() {} else if {} sequence,
// or as a trie search if you want to get fancy.
Token token_from_string(const std::string& str);
// and in the code.
Token tok = token_from_string(String);
switch(tok) {
case Token::AAA:
break;
case Token::BBB:
break;
case Token::CCC:
break;
}然后,一种好的做法是在字符串从流中出来时立即对其进行标记,然后对标记本身进行操作。
发布于 2018-10-05 19:06:31
Q:在语句检测时执行命令的最佳实践是什么?
当找到某个字符串时,您想要更改控制流。一个开关说“根据这个变量的值选择一个命令”。您还可以使用if/else。
问:,如果是这样的话,你能提供一个简单的例子吗,因为我不太理解这个方法。
卓越文件格式与CNC g-code并不遥远。
这是一个switch from an EXCELLON to GCODE converter的示例。
诀窍是修改输出方法generateFile,不使用fprint生成G代码文件,而是调用您的命令(可能是move、lift、wait等)。
您也可以从一个g-code parser开始,然后修改它以处理卓越格式。
https://stackoverflow.com/questions/52650861
复制相似问题