LINUX.ORG.RU

Ответ на: комментарий от x3al

Как я понял, для split и csplit задаются параметрами количество строк, а не символов. Символы - буквы, знаки препинания, пробелы и т.п.

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

Взять язык, к которому есть юникодные батарейки и написать свой маленький split.

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

А если под символами он, как любой нормальный человек, понимает графемы?

Тогда в общем случае это не такая уж и элементарная задача. LATIN SMALL LETTER A + COMBINING ACUTE ACCENT или LATIN SMALL LETTER A WITH ACUTE — это одна графема в обоих случаях, или две и одна соответственно?

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

Если считать по codepoint — да, но зачастую в одной графеме больше, чем 1 codepoint. Яркий пример. Extended grapheme cluster из предыдущего комментария — оно.

Нормализации в общем случае недостаточно. Те же ударения, например.

x3al ★★★★★
()
Последнее исправление: x3al (всего исправлений: 1)
Ответ на: комментарий от x3al

Ясно, спасибо. Мне просто самому когда-то надо было что-то похожее — посчитать сколько места займет строка для вывода «таблицей» в curses приложении. В итоге на общий случай я забил.

liaonau
()

man split

Пример:

cat testfile 
Тестовый файлец
со всякой фигней

split -b 10 testfile 
ls
testfile  xaa  xab  xac  xad
cat xab
айлец
со в
Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от liaonau

А iconv в utf32 будет достаточно?

Нет. Grapheme cluster может иметь любую длину. L̕͜IK̴͡È͢ Ţ́͟H͡IŞ

Боюсь, что для нормального решения задачи «нарезать текстовый файл на части по n символов» нужна программа, использующая ICU.

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

Прямо ждал что сейчас тема плавно перетечет в обсуждение KOI8-R ☺.

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

Я пользовался glib. В случае curses еще проблема в том, что не все терминалы (в частности виртуальный терминал linux) нарисуют один символ встретив, например, букву и за ней акут.

Хотя для вопроса ТС это неважно.

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

1) iconv в UTF-32
2) split по n * 4 байт
3) iconv в исходную кодировку

Спасибо, воспользовался вашим советом.

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

split

он, как любой нормальный человек

наркоман?

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.