所以我有一个要解释的.txt文件(Excellon)。
示例文件:
M48
FMAT,2
ICI,OFF
METRIC,TZ,000.000
T1C1.016
%
G90
M71
T1
X36551Y-569519
X17780Y-589280
当我扫描文件时,我将语句(例如METRIC)分开并保存在字符串中。之后,我要基于此字符串的值执行代码。
在语句检测中执行命令的最佳实践是什么。
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他们正在谈论使用地图,我也应该尝试吗?如果可以的话,您可以提供一个简单的示例,因为我不太了解这种方法。
答案 0 :(得分:0)
正确的答案将取决于许多因素,但是在您的文章两行之间阅读时,我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;
}
然后,一个好的做法是在字符串从流中出来后立即对其进行令牌化,然后对令牌本身进行操作。
答案 1 :(得分:0)
问::执行语句检测命令的最佳实践是什么。
当找到某个字符串时,您想更改控制流。 一个开关说“基于此变量值选择一个命令”。您也可以使用if / else。
问:如果可以的话,您可以提供一个简单的示例,因为我不太了解这种方法。
Excellon文件格式与CNC g代码相距不远。
这是switch from an EXCELLON to GCODE converter的示例。
诀窍是修改输出方法generateFile,而不使用fprint生成G代码文件,而是调用命令(可能是移动,抬起,等待等)。
您还可以从g-code parser开始,然后对其进行修改以处理excellon格式。