Форум OlegON > > >

Разбирающимся в LUA: как получить кусок строки ПОСЛЕ 40(50) символа?

19.01.2020 16:32


03.07.2017 12:29
УКМ_эксплуатант_2
 
Собственно, проблема следующая:
в названии товара присутствует КРИТИЧЕСКИ ЗНАЧИМАЯ информация для работы магазина. У С+ по каким-то причинам никак не удается выдать название товара полностью (хотя, в 10 прошиве выдавало).
Стал переделывать скрипт receipt.lua в функции печати свойств товара (есдиственная функция, в которой что-то можно сделать.
Например:
товар называется
СУПЕР-ПУПЕР МОТОРНОЕ МАСЛО ИЗ САМОЙ ГЛУБОКОЙ СКВАЖИНЫ В МИРЕ С ПРИСАДКАМИ 5Л
На 14 прошивке печатается только (для примера - 20 символов):
СУПЕР-ПУПЕР МОТОРНОЕ
Моя идея в следующем:
в секции где печатаются свойства выводить отдельной строкой то, что ПОСЛЕ 20 символа (20 - это для примера):
МАСЛО ИЗ САМОЙ ГЛУБОКОЙ СКВАЖИНЫ В МИРЕ С ПРИСАДКАМИ 5Л
А уж его можно печатать и в две строки.
Но вот беда!
Пытаюсь определить длину названия функцией string.len - выдает непонятное число, имеющее далекое отношение к реальной длине названия.
Вот копи-паста скрипта (для отладки - вставляется в function print_item_to_printer(__item, __printer_type, __print_data):
SQL код:
-- пытаюсь вытащить все что после символа DlinnoeNazvanie
       local intTmpDlName
=string.len(__item.name);
       
local strNamePosle35="";
       
strNamePosle35=string.sub (__item.nameDlinnoeNazvanie);
     
text text .. ukm.leftpad("  *****отладка*******   "width".") .. "\n";
  
text text .. ukm.leftpad(tostring(intTmpDlName), width".") .. "\n";
     
text text .. ukm.leftpad("  *****отладка*******   "width".") .. "\n\n\n";
     
text text .. ukm.leftpad("  *****отладка*******   "width".") .. "\n";
  
text text .. ukm.leftpad(strNamePosle35width".") .. "\n";
     
text text .. ukm.leftpad("  *****отладка*******   "width".") .. "\n\n\n"
А вот что оно выдает на печать:
SQL код:
Z000-0000574 Фильтр салонный угольный

................  *****отладка*******   
.....................................
.46
................  *****отладка*******   


................  *****
отладка*******   
....................
�р салонный угольный
................  *****отладка*******   


                                        
                                        
 
ШТ 2.000 380.00             760.00 
ZF3000027291 Колодки тормозные комплект

................  *****отладка*******   
.....................................
.50
................  *****отладка*******   


................  *****
отладка*******   
..................
�ки тормозные комплект
................  *****отладка******* 
Фильтр салонный угольный - 24 символа, возвращается - 46
Колодки тормозные комплект - 26 символов, возвращается 50

Как получить окончание названия?
03.07.2017 12:36
vdm
 
Потому что UTF-8, а string.len не предназначена для многобайтовых кодировок.
Есть ukm.str_len().
03.07.2017 13:28
УКМ_эксплуатант_2
 
Спасибо. Получилось.
Еще включу сжатый режим - надеюсь получу некоторую экономию бумаги
04.07.2017 16:03
Galant
 
Цитата:
УКМ_эксплуатант_2 Спасибо. Получилось.
Еще включу сжатый режим - надеюсь получу некоторую экономию бумаги
удалив в скрипте *LUA дубли: "\n"- сэкономишь еще пару строк)))
05.07.2017 10:06
УКМ_эксплуатант_2
 
Дык это только для отладки. В боевом - все по максимуму "обрезано"...
07.07.2017 09:01
AlgolB
 
У меня не печатается в чеке перед названием товара его код. Подскажите какую строчку и куда добавить в receipt.lua

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.