6

私はちょうど奇妙な構文でSOに関する答えに出くわしました:

Delphi の文字列に改行文字を含めるにはどうすればよいですか?

MyString := 'Hello,' + ^M + ^J + 'world!';

私は数年前から Delphi を使用していますが、制御文字にサーカムフレックス記号を使用できるとは知りませんでした。

これは初期の Delphi や Turbo Pascal の時代の残り物ですか?

現代でも使うべき?

PS: 改行文字に関するアドバイスは求めていません。元の質問で説明したように、sLineBreak やその他の方法があります。

4

3 に答える 3

9

いいえ、Turbo Pascal 時代のものではありません。それは TP の何十年も前、MS-DOS よりも前、そしておそらく UNIX よりも前からのものです。最初の 300 ビット/秒のダイヤルアップ モデムと DEC VT-52 ターミナル、PDP-8 マシン上の RT-8 OS と C の初期バージョンのような古いもの。 .

「^」記号は「Ctrl」キーのショートカットです。したがって^C、in traditional notation はCtrl+Cin Microsoft notation を表します。この表記法は、前述の Turbo Pascal、Norton Utilities、DOS Navigator などのように、MS-DOS 時代のテキストモード メニューに広く使用されていました。

私の記憶では、「^」は「64 を引く」と考えることができます。
そのままChr(65)です。'A'_ Chr(1)_ そして:-) MS-DOS の AFAIR では、Ctrl+Shift+"2/@" を押すと、実際にはBIOS キーボード バッファーが生成されます :-)^A
^@#0#0

^[ AFAIR は#27別名 Esc(ape) char になります。実行telnet.exeすると、エスケープ文字としてプロンプトが表示されます。

そのため、Turbo Pascal はずっと前に、時代に恵まれた慣習に従うことを選択し、それ以来、下位互換性のルールが適用されてきました。個人的には、1 行で表示したい場合'bla-bla'^M^J'foo-baz'よりも文字列のようにリテラルを使用します。'bla-bla'#13#10'foo-baz'また、リテラルが複数のソース行を使用する場合は、plus を使用して値を構築する方が適しています。

残念なことに、Delphi IDE での構文の強調表示は、その種の定数ではどうしようもなく壊れています。

于 2012-10-25T08:32:16.473 に答える
3

はい、これは昔からの遺産です。

いいえ、この機能を使用する習慣を身につけるべきではありません。コードは、書かれるよりも読まれることが多いことに注意してください。その構文の意味を知らない可能性が最も高い読者のことを常に考えてください。

于 2012-10-25T06:40:40.520 に答える
0

はい、これは TP デイズの残り物です。このようにステートメントを書くこともできます

mystring:= 'Hello'#13#10'world!';

おそらく、^M と ^J を使用するよりもわかりにくく、理解しやすいでしょう。もちろん、実際に定数を定義する必要があります

const
 crlf = #13#10

begin
 mystring:= 'Hello' + crlf + 'world!';
end;
于 2012-10-25T06:37:10.287 に答える