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

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

12.06.2019, 14:29. Показов 1323. Ответов 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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.06.2019, 14:29
Ответы с готовыми решениями:

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

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

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

3
 Аватар для vantfiles
1018 / 1914 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
12.06.2019, 18:11
Попробуйте такой вариант:

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
Модератор
 Аватар для Curry
5154 / 3474 / 536
Регистрация: 01.06.2013
Сообщений: 7,532
Записей в блоге: 9
13.06.2019, 09:16
vantfiles, у ТС parts, это кол-во частей, а не их длина.
0
 Аватар для vantfiles
1018 / 1914 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
13.06.2019, 10:59
Curry,

size = math.ceil( text:len() / parts )
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.06.2019, 10:59
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru