LINUX.ORG.RU

поток, считающий буквы

 


0

2

Тривиальный вопрос. Вроде бы решается с помощью gray streams за короткое время. Но не хочу ещё один велосипед, пусть даже на 50 строк. Есть ли библиотека, к-рая это умеет? Кодировка у меня utf-8, хотя вряд ли это важно.

Мне нужно, чтобы ю считалась за одну букву и cr lf тоже считалась за одну, если она возвращается потоком как #\newline. И чтобы была функция, подобная file-position, но возвращающая число букв, считанных таким путём от начала файла.

Код должен быть переносим между реализациями.

Судя по первым замечательным ответам, данное сообщество не может даже на эту тему сказать ничего внятного (и поводов для лола здесь нет - сообщество сильно деградировало за последние годы), поэтому я буду здесь цитировать stack overflow, где обычно на вопросы хоть как-то отвечают.

https://stackoverflow.com/questions/2711215/common-lisp-gray-streams/2711652#...

https://stackoverflow.com/questions/2711215/common-lisp-gray-streams/2711659#...

flexi-streams, упомянутый улыбчивым анонимусом, считает октеты и поэтому не подходит.

Есть пример вот здесь, но он только для SBCL. Есть вопрос про Stack Overflow, но он говорит как сделать, а не предлагает библиотеку, в которой это уже сделано.

Видимо, на этом поиск будет прекращен и будет сделан велосипед.

★★★★★

Последнее исправление: den73 (всего исправлений: 1)

поток, считающий буквы

Русский для начала выучи, идиот.

anonymous
()
Ответ на: комментарий от anonymous

Для чего? «Считать» буквы?

Этот идиот даже не смог выразить, что ему надо.

anonymous
()

и поводов для лола здесь нет

Да что понимаешь в лолах :-) Лол :-)

сообщество сильно деградировало за последние годы

Какое такое сообщество? :-) Лол :-)

flexi-streams, упомянутый улыбчивым анонимусом, считает октеты и поэтому не подходит.

Чего-чего? :-) Сообщество что-ли? :-) Лол :-)

Читай (по-английски):

char-length sequence &key external-format start end => length
Kind of the inverse of OCTET-LENGTH. Returns the length of the subsequence (of octets) of sequence from start to end in characters if decoded using the external format designated by external-format.

Лол :-)

anonymous
()
Ответ на: комментарий от monk

Думаю, работает, но сам по себе он буквы не считает. Ещё раз посмотрел и не вижу, из чего бы следовало, что он ведёт себя так, как я хочу.

den73 ★★★★★
() автор топика
Ответ на: комментарий от den73

но сам по себе он буквы не считает

Брр. Сам по себе считает «пример вот здесь, но он только для SBCL» (твоя ссылка). На мой взгляд, этот пример должен работать и с trivial-gray-stream (там вроде ничего SBCL-специфичного нет).

monk ★★★★★
()
Ответ на: комментарий от monk

Угу. Читающий уже переделал, пишущий в процессе. Самое трудоёмкое на данный момент оказалось русифицировать.

den73 ★★★★★
() автор топика
Ответ на: комментарий от den73

сообщество сильно деградировало за последние годы

Чем оно так деградировало? Отказывается разговаривать с идиотами?

О, да, idiomatic CL:


(defmethod stream-read-char ((|Поток| |Считающий-входной-поток-литер|))
  (with-accessors ((|Внутр-поток| |Поток-из|) (|Литеры| |Счётчик-литер-из|)
                   (|Строки| |Счётчик-строк-из|) (|Колонки| |Счётчик-колонок-из|)
                   (|Стар| |Стар-счётчик-колонок-из|)) |Поток|

Именно так надо писать на CL.

anonymous
()

данное сообщество не может даже на эту тему сказать ничего внятного

У тебя хоть примитивные логические цепи в мозгу работают?

Задал вопрос, тут же обозвал всех козлами. И хочешь чего-то от людей получить.

Хотя зачем я спрашиваю.

anonymous
()
Ответ на: комментарий от Bad_ptr

Черточки не из-за кириллицы, а из-за регистра букв. Как писать без чёрточек для регистра букв тоже уже придумал и пользуюсь придумкой уже лет 5. Просто этот код грузится раньше придумки. Не на Яре потому, что это зависимость Яра.

den73 ★★★★★
() автор топика
Последнее исправление: den73 (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.