1

「Adaforsoftwareengineers」のサンプルプログラムのソースは次のとおりです。

http://www.springer.com/cda/content/document/cda_downloaddocument/978-1-84882-313-6_programs.zip

抽出後、c04-arrays/justifyに移動します

$ gnatmake justify.adb

justifyを実行し、出力を入力である「example.txt」と比較します。私が得る出力は絡み合った線であり、正当化とは何の関係もありません。出力を保存する場合:

$ justify > result.txt

それからそれを見ると、ターミナルで他の行の上に書かれている行があると結論付けることができます。しかし、その問題を無視しても、その結果は正当化とは言い難い。

私の質問:同じ予期しない出力が得られますか?あなたが得る出力は正当化に似ていますか?

入力はソースにも付属していることに注意してください。だから私はプログラムを破ろうとさえしていません。

ターミナルで得られる出力:

  クイッククイックブラウンフォックスは怠惰な犬を飛び越えました。
          茶色のキツネが怠惰な犬を飛び越えた。
          ThequickbrownfoxjumpedoverthelazydogThequickbrownfoxjumpedov
 クイッククイックブラウンフォックスは怠惰な犬を飛び越えました。
  怠惰な犬の上にキツネの速い茶色。
 速い茶色のキツネが犬を飛び越えた。
 速い茶色のキツネは怠惰なものを飛び越えました
 あなたの遅い灰色のオオカミは、陽気で猫を飛び越えました。
 遅い灰色のオオカミは、陽気で猫を飛び越えました。
  ゆっくりとした灰色は、陽気で猫の上に狼狽しました。
 遅い灰色のオオカミはスキップされた猫。
 遅い灰色のオオカミはスキップしました
 ゆっくりとした灰色のオオカミは、陽気に飛び越えました
          猫。

リダイレクト後の出力:

          速い茶色のキツネは怠惰な犬を飛び越えました。
  クイック
          茶色のキツネが怠惰な犬を飛び越えた。
          ThequickbrownfoxjumpedoverthelazydogThequickbrownfoxjumpedov
          速い茶色のキツネは怠惰な犬を飛び越えました。
 クイック
          茶色のキツネが怠惰な犬を飛び越えた。
  クイックブラウンフォックス
          怠惰な犬を飛び越えた。
 速い茶色のキツネが飛び越えた
          怠惰な犬。
 速い茶色のキツネは怠惰なものを飛び越えました
          犬。
  ゆっくりとした灰色のオオカミは、陽気で猫を飛び越えました。
 The
          遅い灰色のオオカミは、陽気な猫をスキップしました。
 スローグレー
          オオカミは元気な猫を飛び越えた。
  遅い灰色のオオカミ
          陽気な猫をスキップしました。
 遅い灰色のオオカミはスキップしました
          陽気な猫の上。
 遅い灰色のオオカミはスキップしました
          陽気な猫。
 ゆっくりとした灰色のオオカミは、陽気に飛び越えました
          猫。


これは正当化されるはずですか?この問題は特に私のマシン/システム/端末/シェルに関連していますか、それともどこか別の場所にありますか?

4

2 に答える 2

3

MacOSXでも同じ出力が得られます。

問題は、example.txtCR / LF行末のあるWindowsファイルであり、LFだけを期待するUnixシステムで実行していることです。Ada RTSは、各入力行の最後にCRを残しています。(私はCRTSが同じことをするかもしれないと思う;Pythonはそれをよりよく処理する)。

ウィキペディアcat -vには、制御文字を表示するために使用できる情報など、多くの情報があります。

      The quick brown fox jumped over the  lazy  dog.^M  The  quick
      brown     fox     jumped     over     the     lazy     dog.^M
      ThequickbrownfoxjumpedoverthelazydogThequickbrownfoxjumpedov
      The  quick  brown  fox  jumped over the lazy dog.^M The quick
      brown fox jumped over the lazy dog.^M  The  quick  brown  fox
      jumped  over  the lazy dog.^M The quick brown fox jumped over
      the lazy dog.^M The quick brown  fox  jumped  over  the  lazy
      dog.^M  The  slow gray wolf skipped over the frisky cat.^M The
      slow gray wolf skipped over the frisky cat.^M The  slow  gray
      wolf  skipped  over  the  frisky  cat.^M  The  slow gray wolf
      skipped over the frisky cat.^M The  slow  gray  wolf  skipped
      over  the  frisky  cat.^M The slow gray wolf skipped over the
      frisky cat.^M The slow gray  wolf  skipped  over  the  frisky
      cat.^M ^M 

お使いのシステムにユーティリティがあるかどうかはわかりませんdos2unixが、どのような場合でも使用できますtr

$ tr -d '\r' <example.txt >example.lf
$ mv example.lf example.txt

通常、元のファイルがテキストとして識別しunzip -aたすべてのファイルの行末を変換するためにを使用してアーカイブを抽出できます。zipこの場合、すべてのファイルがバイナリとして識別されたため、変換を強制するために使用できますunzip -aa(これらが教科書の例である場合、実際のバイナリファイルが存在しないことはかなり安全です!)

于 2013-02-04T16:28:37.987 に答える
0

答えは、コンソールがタブをスペースのように見せているため、異なる見た目の結果が得られている可能性があります。


これは次の方法でテストできます。

Ada.Text_IO.Put( ASCII.HT & '.' );
Ada.Text_IO.Put( ' ' & '.');

2つの期間が同じ列にあるかどうかを確認します。

于 2013-02-04T14:49:57.373 に答える