Разница между EOT и EOF

Perl

хэш % h содержит данные, а массив @h управляет порядком, в котором обнаружены элементы хэша. OTW, хеш-ключи будут выбраны в случайном порядке.

perl -F, -lane '
   BEGIN{ $"=$,=","; }
     push @{$h{"@F[-3..-1]"}}, $F[0];
     $h[-1+keys %h] = "@F[-3..-1]";
   END{ print  @{$h{$_}}, $_ for @h; }
'  yourcsvfile

Sed

sed -e '
   :loop
      $!N
      s/^\(.*\)\(\(,[^,]*\)\{3\}\)\n\([^,]*\)\2$/\1,\4\2/
   tloop
   P;D
'  yourcsvfile

Bash

sed \$G yourcsvfile | # we add a dummy line to signal last record has been processed
while IFS=, read -r -a A; do
   var=${A[@]: -3:3}
   var=${var// /,}
   case $var in
      "$prev" ) x=${x-}${x:+,}${A[0]} ;;
      * ) case $prev in ?* ) echo "$x,$prev" ;; esac; prev=$var; x=${A[0]} ;;
   esac
done
5
16.11.2016, 19:05
3 ответа

Вообще, EOF - это не символ, это отсутствие символа.

Если программа работает на терминале в каноническом режиме с настройками по умолчанию (т.е. обычная программа на C, которая просто использует stdio), она никогда не увидит ASCII символ EOT. Драйвер терминала распознает этот символ и создает условие EOF (которое на низком уровне является значением 0, возвращаемым из read()). Библиотека stdio преобразует это условие EOF в возвращаемое значение, соответствующее данной функции (макрос EOF для getchar(), нулевой указатель для fgets() и т.д.). )

Числовое значение макроса EOF не имеет значения нигде, кроме библиотеки Си, и не должно влиять на ваше понимание смысла условия EOF.

12
27.01.2020, 20:38

EOF в контексте C - это просто то, что не может появиться в файле. EOT - это символ ASCII, который исторически сигнализировал об окончании сообщения (и является специальным символом в терминалах UNIX, который означает конец потока , когда он появляется только при вводе пользователем ), но он CAN появляется в файлах, поэтому использование его в C для обозначения конца файла было бы ужасной идеей при чтении двоичных файлов!

3
27.01.2020, 20:38

EOT - это один из нескольких управляющих символов, используемых провидческими устройствами. Есть ряд других управляющих символов, которые связаны с передачей данных по последовательным линиям или хранением файлов на последовательном источнике, таком как бумажная лента. К ним относятся такие символы, как SOH, STX, ETX, FS, RS, GS и, US. Дополнительные управляющие символы используются для управления трансмиссией и исправления ошибок.

В последовательном соединении символ EOT (конец передачи) указывает на желание завершить передачу. Последовательные соединения обычно доступны с помощью файлового драйвера. Когда последовательная передача завершается, файловый драйвер сообщает об этом как о состоянии EOF (конец файла).

EOF - это не персонаж. getchar () возвращает целое число. Допустимый символ while будет иметь значение в диапазоне от 0 до 255. Значение -1 часто используется как индикатор ложного / недействительного / сбоя в Unix / Linux. (На самом деле значение не 0, так как существует множество причин для неудачи, но обычно только один случай успеха.) Когда getchar () возвращает -1, очевидно, что это не возвращает символ.Однако, если вы сохраните вывод в байтах, вы не сможете отличить EOF от символа DEL (Удалить).

3
27.01.2020, 20:38

Теги

Похожие вопросы