我正在尝试编写一个函数,如果已发送行的任何字符的ascii值> 127(不可打印),则返回true:
function isBinary(line: string): boolean;
begin
result := false;
for c in line do
if (Ord(c) > 127) then
result := true;
end;
end;
但是,它给出了错误:
Error: Ordinal expression expected
问题出在哪里,如何解决?谢谢你的帮助。
答案 0 :(得分:2)
您显示的代码中至少有两个错误。
c
。您需要执行此操作,使用适合您代码中流行string
类型的类型,而我们无法推断出这种类型。begin
语句,但是有两个end
语句。 end
个太多了。即使修复此问题,此功能也不会测试任何东西是否为二进制。根据定义,string
包含文本。而且,大量文本可以使用大于127的序数值进行编码。
此外,ASCII编码使用0到127之间的值(包括0和127),因此“ ascii value> 127”在术语上是矛盾的。
答案 1 :(得分:1)
免责声明:我正在写此答案,但不知道c
的类型。
函数Ord具有以下原型:
function Ord(X: TOrdinal):LongInt;
这意味着它将序数类型作为参数。如果c
的类型为char
,则该函数可以正常运行,但是在您的代码中,end
子句之后还有一个额外的if
。
编写函数的正确方法是:
function isBinary(line: string): boolean;
begin
result := false;
for c in line do
if (Ord(c) > 127) then
result := true;
end;
如果c
不是char
,则问题的原因现在变得很明显。