我刚刚遇到了一个关于 SO 的答案,语法很奇怪:
MyString := 'Hello,' + ^M + ^J + 'world!';
我已经使用 Delphi 好几年了,但我不知道您可以将抑扬符用于控制字符。
这只是早期 Delphi 或 Turbo Pascal 时代的遗留物吗?
现在应该使用它吗?
PS:我不是在询问有关换行符的建议,原始问题中讨论了 sLineBreak 和其他方法。
我刚刚遇到了一个关于 SO 的答案,语法很奇怪:
MyString := 'Hello,' + ^M + ^J + 'world!';
我已经使用 Delphi 好几年了,但我不知道您可以将抑扬符用于控制字符。
这只是早期 Delphi 或 Turbo Pascal 时代的遗留物吗?
现在应该使用它吗?
PS:我不是在询问有关换行符的建议,原始问题中讨论了 sLineBreak 和其他方法。
不,它不是从 Turbo Pascal 时代开始的。它是在 TP 之前的几十年,在 MS-DOS 之前,甚至可能在 UNIX 之前。像第一个每秒 300 位的拨号调制解调器和 DEC VT-52 终端、PDP-8 机器上的 RT-8 操作系统和早期版本的 C 之类的旧东西。或者甚至更老——尽管对我来说更老的一切都只是传说 :-) .
“^”符号是“Ctrl”键的快捷键。所以^C
在传统表示法中代表Ctrl+C
微软表示法。该符号在 MS-DOS 时代被广泛用于文本模式菜单,如前面提到的 Turbo Pascal、Norton Utilities、DOS Navigator 等。
根据我的记忆,您可以考虑用“^”表示“减 64”。就
这样。_ _
并且将是:-) 在 MS-DOS 中按 Ctrl+Shift+"2/@" 的 AFAIR 实际上会生成BIOS 键盘缓冲区 :-) Chr(65)
'A'
Chr(1)
^A
^@
#0
#0
^[ 将 AFAIR#27
又名 Esc(ape) char - 如果您运行telnet.exe
,您会看到它被提示为转义字符。
因此,Turbo Pascal 很久以前就选择遵循时间祝福的约定,然后从那时起就开始采用向后兼容的规则。就个人而言,我比你想要它在一行上'bla-bla'^M^J'foo-baz'
更像字符串。'bla-bla'#13#10'foo-baz'
当您的文字需要多个源代码行时,使用 plus 构造值更合适。
遗憾的是,Delphi IDE 中的语法高亮在这种常量上是无可救药的。
是的,这是昔日的遗产。
不,您不应该养成使用此功能的习惯。请记住,阅读代码的频率高于编写代码的频率。始终考虑您的读者,他们很可能不知道该语法的含义。
是的,这是 TP 日遗留下来的。你也可以这样写你的陈述
mystring:= 'Hello'#13#10'world!';
这可能比使用 ^M 和 ^J 不那么晦涩难懂,也更容易理解。当然,你真的应该定义常量
const
crlf = #13#10
begin
mystring:= 'Hello' + crlf + 'world!';
end;