Меряемся концами строк: terminator vs separator

Здесь обсуждаются темы, косвенно связанные с Far.
User avatar
HaRT
Moderator
Posts: 7879
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 62 times
Been thanked: 93 times

Меряемся концами строк: terminator vs separator

Postby HaRT » Mon 26 Sep, 2011 19:03

AleXH wrote:Если я правильно понимаю, то это баг - 0x0D0A в конце файла должны интерпретироваться как пустая строка, но этого не происходит - за пустую строку считаются только 0x0D0A0D0A.
Нет, единственная пара CR-LF в конце файла завершает последнюю непустую строку, а не образует новую пустую; а вот CR-LF-CR-LF — это уже пустая строка в конце файла.
Last edited by HaRT on Tue 03 Dec, 2013 17:23, edited 1 time in total.
Reason: Добавлена ссылка на исходную тему
Фар есть инструмент, а не нянька. © 2009 DrKnS

AleXH
Posts: 1000
Joined: Sun 12 Apr, 2009 05:21
Been thanked: 1 time

Re: Regular Expression Search and Replace (RESearch)

Postby AleXH » Mon 26 Sep, 2011 19:42

HaRT
Не вижу логики - если стоит <CR><LF>ля-ляля<EOF> никто же не будет отрицать, что "ля-ляля" символы последней строки? - именно так это выглядит в редакторе. Но важнее то, что Line Feed по определению создаёт новую строку, так как все символы за ним есть символы новой строки. Стало быть <CR><LF><EOF> - пустая строка.

User avatar
HaRT
Moderator
Posts: 7879
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 62 times
Been thanked: 93 times

Re: Regular Expression Search and Replace (RESearch)

Postby HaRT » Mon 26 Sep, 2011 20:09

AleXH
Да вы, батенька, теоретик. Что ж, извольте:
CR-LF — это завершение строки (line terminator), а не разделитель строк (lines separator). Строка без терминатора неполноценная (gcc, например, на такую строку выдаёт предупреждение). К счастью, в одном файле такая недо-строка может быть только одна.
Да и из чисто практических соображений чрезвычайно неудобно считать CR-LF-EOL пустой строкой.
Фар есть инструмент, а не нянька. © 2009 DrKnS

Shmuel
Posts: 4904
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 9 times
Been thanked: 118 times

Re: Regular Expression Search and Replace (RESearch)

Postby Shmuel » Mon 26 Sep, 2011 20:14

В редакторе Фара строка рассматривается как последовательность StringText и StringEOL. При замене в редакторе пустой строкой считается сочетание пустого StringText и непустого StringEOL. Следовательно, ля-ля<CR><LF><EOF> пустой строки не содержит.

User avatar
John Doe
Бюрократ
Posts: 11024
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 9 times
Been thanked: 61 times

Re: Regular Expression Search and Replace (RESearch)

Postby John Doe » Mon 26 Sep, 2011 20:38

...но выглядит в редакторе фара именно как пустая строка.

AleXH
Posts: 1000
Joined: Sun 12 Apr, 2009 05:21
Been thanked: 1 time

Re: Regular Expression Search and Replace (RESearch)

Postby AleXH » Mon 26 Sep, 2011 20:49

HaRT
Терминатор говорите? Я как-то всю жизнь полагал, что возвращают каретку в начало для того, что бы начать новую строку от левого поля, а не для того, чтобы закончить предыдущую ))) - для этого переводить каретку нет необходимости. В качестве терминатора <CR> стал использоваться при вводе текста в терминале, но ввод текста, и текстовой файл это разные вещи, мы же говорим о замене в текстовом файле.

Что считает FAR за пустую строку, и как он её определяет это уже к разработчикам. <EOF> включает в себя ещё и функцию <EOL>, и то что лежит между <LF> и <EOL> есть строка, и если она пуста, значит она пуста.

User avatar
HaRT
Moderator
Posts: 7879
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 62 times
Been thanked: 93 times

Re: Regular Expression Search and Replace (RESearch)

Postby HaRT » Mon 26 Sep, 2011 21:07

AleXH wrote:<EOF> по-сути включает в себя ещё и функцию <EOL>
Чушь!
AleXH wrote:то что лежит между <LF> и <EOL> есть строка
Как я уже отметил, неполноценная строка. Кто такие использует, тот ССЗБ.
Фар есть инструмент, а не нянька. © 2009 DrKnS

AleXH
Posts: 1000
Joined: Sun 12 Apr, 2009 05:21
Been thanked: 1 time

Re: Regular Expression Search and Replace (RESearch)

Postby AleXH » Mon 26 Sep, 2011 21:16

Почему чушь? Вы хотите сказать, что конец текстового файла не подразумевает одновременный и конец строки? ;)

Кто такие супер-супер-зе-бест я не знаю :) Но откуда произошли понятия <CR><LF> я помню, а вы замещаете исконный смысл понятий ересью.

Maximus5
Posts: 3291
Joined: Sun 11 Nov, 2007 02:03
Been thanked: 4 times
Contact:

Re: Regular Expression Search and Replace (RESearch)

Postby Maximus5 » Mon 26 Sep, 2011 22:10

Я собственно не понимаю о чем спор.
Считается ли строкой то что между <LF> и <EOF>?
Да, считается. Колорер ее красит? Красит. Значит фар говорит, что строка есть, более того, дает с ней что-то делать. Что эта строка содержит? Пустоту. Логика подсказывает, что это пустая строка.

AlexII
Posts: 260
Joined: Mon 10 Apr, 2006 00:53
Location: станица Григорополисская
Has thanked: 58 times
Contact:

Re: Regular Expression Search and Replace (RESearch)

Postby AlexII » Mon 26 Sep, 2011 22:12

AleXH wrote:Вы хотите сказать, что конец текстового файла не подразумевает одновременный и конец строки?

Не подразумевает.
AleXH wrote:Кто такие супер-супер-зе-бест я не знаю :)


AleXH wrote:Но откуда произошли понятия <CR><LF> я помню, а вы замещаете исконный смысл понятий ересью.

Тут все помнят. А ежели кто не помнит — умеет пользоваться Wikipedia: Newline, Carriage return, End-of-file.

Если следовать Вашей извращённой логике, то «A»+«B\0x0D\0x0A» — это две строки, а не одна.

User avatar
DrKnS
Posts: 4433
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 2 times
Been thanked: 101 times
Contact:

Re: Regular Expression Search and Replace (RESearch)

Postby DrKnS » Mon 26 Sep, 2011 22:34

А вот в пустом файле (ну или в пустом редакторе) - сколько строк?

Maximus5
Posts: 3291
Joined: Sun 11 Nov, 2007 02:03
Been thanked: 4 times
Contact:

Re: Regular Expression Search and Replace (RESearch)

Postby Maximus5 » Mon 26 Sep, 2011 22:38

AlexII wrote:Если следовать Вашей извращённой логике, то «A»+«B\0x0D\0x0A» — это две строки, а не одна.

Скажу вам по очень большому секрету, что это не одна строка. И даже не две. А три.
Attachments
123.7z
(114 Bytes) Downloaded 77 times

Maximus5
Posts: 3291
Joined: Sun 11 Nov, 2007 02:03
Been thanked: 4 times
Contact:

Re: Regular Expression Search and Replace (RESearch)

Postby Maximus5 » Mon 26 Sep, 2011 22:41

DrKnS wrote:А вот в пустом файле (ну или в пустом редакторе) - сколько строк?

По всей видимости она пустая строка ), по крайней мере так написано в статусной строке редактора - "1/1"

AleXH
Posts: 1000
Joined: Sun 12 Apr, 2009 05:21
Been thanked: 1 time

Re: Regular Expression Search and Replace (RESearch)

Postby AleXH » Tue 27 Sep, 2011 06:35

Открыв в ЛЮБОМ текстовом редакторе текстовой файл из трёх байтов "310D0A", и нажав курсор вниз мы видим, что он встал на новую строку, но она пока ещё пуста. Удалив последние 0x0D0A, и оставив только 0x31, мы видим, что курсор вниз уже не сдвигается, так как новая строка ещё не создана.
Last edited by AleXH on Tue 27 Sep, 2011 10:58, edited 3 times in total.

2useven10
Posts: 2830
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 2 times
Been thanked: 72 times

Re: Regular Expression Search and Replace (RESearch)

Postby 2useven10 » Tue 27 Sep, 2011 06:52

Всё остальное - измышление (ересь) программиста писавшего компилятор, и решившего "прикрутить" <LF> в качестве терминатора строк.

AleXH
Posts: 1000
Joined: Sun 12 Apr, 2009 05:21
Been thanked: 1 time

Re: Regular Expression Search and Replace (RESearch)

Postby AleXH » Tue 27 Sep, 2011 07:13

2useven10
Дело не в ретроградных взглядах, а в искажениии понятий, и в результате этого неправильной логике работы плагина(ов), как сабжевого, так и альтернативных. Все разработчики текстовых редакторов (понятие <LF> определено именно в контексте текста) придерживаются исконной логики, а не новодела. Так как мы производим замену в текстовом редакторе, то определение понятий должно быть соответствующим.

Тем, кто не может отречься от еретических взглядов, предлагаю объяснение, которое приведёт вас к правильному подсчёту строк, пощадив веру в <LF> терминатора :)

1. <LF> это терминатор строки.
2. Текстовой файл в 0 байт содержит только <EOF>.
3. Открыв файл из п.2 в текстовом редакторе, мы заключаем, что строка есть, так как в ней стоит курсор, эта строка пуста, и не правильна, так как она не имеет терминатора, но априори она есть.
4. Исходя из п.1 и п.3 последовательность <LF><EOF> содержит 2 строки - одну до <LF> включительно, а другую после <LF>, но перед <EOF>.

Отсюда видно, что плагины регэкспов обрабатывают последнюю пустую строку неверно.


Return to “Операционные системы, командные оболочки и прочее”

Who is online

Users browsing this forum: No registered users and 2 guests