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

Здесь обсуждаются темы, косвенно связанные с Far.
AleXH
Posts: 1000
Joined: Sun 12 Apr, 2009 05:21
Been thanked: 1 time

Re: Regular Expression Search and Replace (RESearch)

Post by AleXH »

Latest post of the previous page:

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

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

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

Отсюда видно, что плагины регэкспов обрабатывают последнюю пустую строку неверно.
AlexII
Posts: 270
Joined: Mon 10 Apr, 2006 00:53
Location: станица Григорополисская
Has thanked: 147 times
Contact:

Re: Regular Expression Search and Replace (RESearch)

Post by AlexII »

Maximus5 wrote:Скажу вам по очень большому секрету, что это не одна строка. И даже не две. А три.
Это скорее печально.
AleXH wrote:Тем, кто не может отречься от еретических взглядов, предлагаю объяснение, которое приведёт вас к правильному подсчёту строк…
Строка есть. Конца строки — нет. Текстовый файл в 0 байт EOF не содержит.

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

Re: Regular Expression Search and Replace (RESearch)

Post by AleXH »

AlexII


<EOF> вообще не содержится ни в каких файлах, это просто ответ, возвращаемый функциями ввода-вывода при достижении конца файла. Если вы откроете файл в 0 байт на чтение, и прочтёте его содержимое, то вам будет возвращено <EOF>.

В общем вопрос пришёл к тому, с чего начали - если существуют строки без терминатора, и существуют пустые строки, обязана ли пустая строка иметь терминатор? Если да, то в файле 0 байт, и между <LF><EOF> пустой строки нет. Но на каком основании мы тогда вводим различие между строками с N символами и с 0 символов, разве это логично? Имхо пустая и "наполненная" строки должны быть равноправны, тогда общее количество строк будет соответствовать счётчикам строк в текстовых редакторах.
AleXH
Posts: 1000
Joined: Sun 12 Apr, 2009 05:21
Been thanked: 1 time

Re: Глюки и баги, появившиеся в «ночных сборках»

Post by AleXH »

Надо будет потом перенести в соответствующую тему, это уже как-то обсуждалось.

я считаю, что обязательный <eol><eof> для текстовых файлов это неправильно. - Имхо, правильно, когда FAR понимает, что <eof> точно также замыкает текст (строку), как и <eol>. Почему так? - Потому что файл из 1 символа, например "А", содержит 1 строку из 1 символа, хоть и заканчивается на <eof>, а не на <eol><eof>. Отсюда следует, что <eol><eof> содержит пустую строку. Собственно <eol> это не символ оканчивающий строку, а символ ПОРОЖДАЮЩИЙ НОВУЮ, именно это делают <CR><LF>, и если новая строка символы не содержит, то это означает, что эта строка пуста.
HaRT wrote:Я не согласен, ибо тогда как на взгляд понять, есть ли в конце текстового файла EOL?
А он нужен? Если, конечно, у вас так заведено, это уже другой вопрос... Но если мы в редакторе будем отображать на последней строке <eol><eof>, тогда у меня возникнет вопрос: "А чем заканчивается предпоследняя строка?". Всё это результат извратного отображения информации в редакторе. Отсутствие переноса символов нужна только для корректного отображения таблиц, но разве это сегодня актуально? К тому же никто не говорит о безоговорочной свёртке, пусть будет как во вьювере опциональной, но НАТИВНОЙ.
Last edited by AleXH on Thu 01 Jan, 1970 01:00, edited 0 times in total.
Reason: Добавлена ссылка на исходную тему
User avatar
HaRT
Moderator
Posts: 10822
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Re: Отображение непечатных знаков: как?

Post by HaRT »

AleXH wrote:Надо будет потом перенести в соответствующую тему, это уже как-то обсуждалось.
Обсуждалось это мною и Вами в теме про RESearch, и возвращаться к этому обсуждению я не намерен, ибо свою позицию там вполне выразил и обосновал.
И незачем повторять — если я на что-то не отвечаю, это не означает, что я не прочитал.
Фар есть инструмент, а не нянька. © 2009 DrKnS
AleXH
Posts: 1000
Joined: Sun 12 Apr, 2009 05:21
Been thanked: 1 time

Re: Regular Expression Search and Replace (RESearch)

Post by AleXH »

А ровных компиляторов нет? Или это очередной ветер маразма от MS?
User avatar
HaRT
Moderator
Posts: 10822
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Post by HaRT »

AleXH wrote:А ровных компиляторов нет? Или это очередной ветер маразма от MS?
При чём тут Майкрософт?!
Например, применительно к языку программирования Си это требование стандарта — см. wny does GCC warn about "no newline at end of file"?

23:01
А вот в Си++ поинтереснее (выделение моё):
* в стандарте C++ 2003-его года пишут: “If a source file that is not empty does not end in a new-line character, or ends in a new-line character immediately preceded by a backslash character, the behavior is undefined.”
* в стандарте C++ 2011-ого года пишут: “A source file that is not empty and that does not end in a new-line character, or that ends in a new-line character immediately preceded by a backslash character before any such splicing takes place, shall be processed as if an additional new-line character were appended to the file.”
Фар есть инструмент, а не нянька. © 2009 DrKnS
AleXH
Posts: 1000
Joined: Sun 12 Apr, 2009 05:21
Been thanked: 1 time

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

Post by AleXH »

В моём понимании отличный редактор тот, который НЕ добавляет в редактируемый файл отсебятины, какими бы стандартами она не рекомендовалась. Мне в редакторе нужен полный контроль над содержимым - захотел исправить в EXE текст, открыл в редакторе FAR'a, исправил - всё работает, вот это правильный, универсальный редактор, который работает везде и всегда! - И не надо париться, поломает ли он файл.

Если же, согласно новых веяний, требуется ПС в конце файла-исходника - взял, поставил, тем более, что делаешь это автоматом для каждой предыдущей строки. Как вариант, можно в far:config добавить опцию автоматического добавления ПС в конце файла.

Или речь идёт о том, что редактор FAR'a использует сторонний код, который ожидает ПС в конце строки, и при его отсутствии он тупит, не понимая, что файл закончился? - Значит нужно избавляться от такого кода.

К чему, вообще, это искусственное ограничение - редактор для текстовых файлов only?
User avatar
HaRT
Moderator
Posts: 10822
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

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

Post by HaRT »

AleXH wrote:К чему, вообще, это искусственное ограничение - редактор для текстовых файлов only?
Я разделяю Ваши представления о правильном редакторе. Насколько я знаю, в редакторе Фара есть серьёзные проблемы с нулевыми символами. (Или уже нет?)
Вроде бы с концами строк никакой отсебятины не добавляется. Если в каких-то случаях это не так, то я бы расценил это как баг — таким проявлениям место в багтрекере.
Фар есть инструмент, а не нянька. © 2009 DrKnS
AleXH
Posts: 1000
Joined: Sun 12 Apr, 2009 05:21
Been thanked: 1 time

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

Post by AleXH »

HaRT wrote:http://forum.farmanager.com/viewtopic.p ... 05#p118226
0. Файл длины 0 байт содержит 0 строк.
1. Если строка не завершается последовательностью EOL, то это недо-строка, она неполноценная.
Это какая-то извращённая логика с дополнительными надуманными сущностями - недостроками.

На самом деле нет никаких недострок - строка она и есть строка, когда она пуста, то значит она пуста. Файл в 0 байт содержит строку в 0 символов. \n создаёт новую строку. - Всё стройно и непротиворечиво. Именно так это выглядит на экране монитора в любом редакторе или при печати на принтере, терминале и тд.
User avatar
HaRT
Moderator
Posts: 10822
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

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

Post by HaRT »

AleXH wrote:Это какая-то извращённая логика с дополнительными надуманными сущностями - недостроками.
Они не надуманные. Полноценные строки подчиняются арифметике, описанной выше; недо-строки — нет. Представьте также, что будет с подсчётом слов в текстовых файлах, если не требовать корректного завершения каждой строки.
AleXH wrote:[...] Всё стройно и непротиворечиво. [...]
Мне надоело тратить силы на этот бесплодный спор.
Хотите ввести свою собственную, с блэкджеком и шлюхами, инновационную концепцию строк в текстовых файлах, делайте это формально, строго и полно. Опишите, каким свойствам вводимые Вами сущности должны удовлетворять, дайте однозначные и непротиворечивые определения, выведите следствия. А мы покритикуем.
Фар есть инструмент, а не нянька. © 2009 DrKnS
Post Reply

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