Форум программистов, компьютерный форум, киберфорум
Lua
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 12.06.2019
Сообщений: 4
1

Проблемы порта функционала с php на Lua (работа с многобайтовыми строками)

12.06.2019, 14:29. Просмотров 838. Ответов 3
Метки lua, php (Все метки)

Доброго времени суток!
Имеется функция разделение многобайтовой на части на php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    private static function devide($text, $parts) {
        $partSize = floor(strlen($text)/$parts + 1);
        $arr = [];
        $i = 0;
        while ($partSize*$i < strlen($text)) {
            $part = substr($text, $i*$partSize, $partSize);
            array_push($arr, $part);
            $i++;
        }
        $tailSize = strlen($text) - $partSize*$i;
        alert($partSize);
        if ($tailSize > 0) {
            $part = substr($text, $i*$partSize, $tailSize);
            array_push($arr, $part);
        }
        
        return $arr;
    }
Несмотря на то, что размер хвоста уходит в минус (он должен быть больше или равен нулю) потерь не происходит и прекрасно работает в обе стороны, но речь не о ней.

В моей попытке порта из-за отрицательного значения хвоста не хватает последней итерации (и без понятия, почему в php не происходит того же самого)
Код сия чуда:
Lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
local function devide(text, parts)
    local partSize = math.floor(text:len()/parts + 1);
    local arr = {}
 
    local i = 0
    while (partSize*i) < text:len() do
        local part = text:sub(i*partSize + i + 1, i*partSize + partSize + i + 1) -- active
        table.insert(arr, part)
        i = i + 1
    end
 
    i = i - 1
    local tailSize = text:len() - partSize*i
    if tailSize > 0 then
        local part = text:sub(i*partSize, i*partSize + tailSize)
        table.insert(arr, part)
    end
    return arr
end
Таковы результаты выполнения на php и на lua:
Длина строки: 5081500
Длина части: 317594
Различия:

 phplua
кол-во итераций1615
длина части * кол-во итераций50815044763910
размер хвоста-4317590

Я уверен на все 101% что сама функция на php некорректна и работает не так, как изначально планировалось, тем не менее буду рад любой помощи, даже если для этого понадобится переделать функции полностью
Заранее извиняюсь, если что-то неправильно написал или как-то неправильно объяснил
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.06.2019, 14:29
Ответы с готовыми решениями:

Работа со строками LUA
Привет! Ребят, подскажите пожалуйста, кто знает, как удалить часть строки То есть: есть строка и...

Работа со строками PHP. Не работает одна вещь. Подробно внутри
Есть такой код (возможно и &quot;быдлокод&quot;, сильно не пинайте – новичок): &lt;?php $file=file(&quot;2.ini&quot;);...

Проблемы с интегрированием LUA
Дотянулись ручки до этого. Но и в общем дальше никак не идет. Скачал исходники LUA (последние...

Изучаю Lua - есть проблемы
Всем привет! Начал изучать Lua вместе с Corona SDK В книге Роберата Иерусалимски в листинге 4.2...

3
383 / 217 / 68
Регистрация: 07.05.2013
Сообщений: 743
12.06.2019, 18:11 2
Попробуйте такой вариант:

Lua
1
2
3
4
5
6
7
8
9
10
11
12
13
function text_divide( text, parts )
 
    local t = {}
    local b = 1; e = parts
    local len = text:len()
    while b <= len do
         table.insert( t, text:sub( b, e ) )
         b = b + parts
         e = e + parts
    end
 
    return t
end
0
3670 / 2403 / 316
Регистрация: 01.06.2013
Сообщений: 5,129
Записей в блоге: 9
13.06.2019, 09:16 3
vantfiles, у ТС parts, это кол-во частей, а не их длина.
0
383 / 217 / 68
Регистрация: 07.05.2013
Сообщений: 743
13.06.2019, 10:59 4
Curry,

size = math.ceil( text:len() / parts )
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.06.2019, 10:59

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Проблемы с игрой S.T.A.L.K.E.R Тень Чернобыля: Lua script error
Здравствуйте! Игра S.T.A.L.K.E.R Тень Чернобыля (Лицензия) прекрасно устанавливается и...

Работа со строками, заполнить компоненты строками из файла
Привет! Нужна помощь в заполнении формы В общем, есть форма отправки письма. У нее есть 2 функции,...

Расширение функционала, курсовая работа
Здравствуйте, пишу курсовой-программу &quot;центр образования&quot;. Использую Spring MVC. База данных:...

Работа со строками(операции над строками)
Пусть дана последовательность, содержащая от 2 до 50 слов, в каждом из которых от 1 до 8 строчных...

Работа со строками. Функции работы со строками
Дана строка символов. В заданном тексте определить позицию первой точки ‘ . ‘.

Сбой функционала Windows XP или работа вирусов
Windows XP HE sp3 MSI 945 Neo2-f, Intel Pentium D 945, NV GF 7600gt стоит фаервол др веб, комп с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.