Сцинтилла: Как найти позицию байта при заданной позиции символа? - PullRequest
1 голос
/ 20 декабря 2010

Учитывая определенный индекс символа в строке, например, 10-й символ в строке 3, есть ли простой способ вычислить 'позицию' этого символа у Сцинтиллы?

Это просто при использовании символов ASCII, но я могупростой способ сделать это при использовании многобайтовых символов UTF-8, где один символ может занимать несколько байтовых позиций.

Ответы [ 3 ]

1 голос
/ 09 марта 2011

Преобразовать текст строки в UTF8, а затем подсчитать байтовые позиции. Преобразование кэша, если может быть сделано несколько запросов.

0 голосов
/ 20 декабря 2010

Вы пробовали: SCI_FINDCOLUMN?:
SCI_FINDCOLUMN(int line, int column)
Это сообщение возвращает позицию столбца в строке с учетом ширины вкладок.Он обрабатывает многобайтовый символ как один столбец.Номера столбцов, как и строки, начинаются с 0.

0 голосов
/ 20 декабря 2010

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

...