libxlsxwriter for Clarion

Программы на Clarion, шаблоны, библиотеки и пр.
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
RaFaeL
Ветеран
Сообщения: 840
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Контактная информация:

libxlsxwriter for Clarion

Сообщение RaFaeL » 18 Февраль 2019, 11:02

Для имен файлов у меня вот так:

Код: Выделить всё

checkstr    string('\/:*?"<>|')

Код: Выделить всё

                      if match(lfile,'[\/:*?"<>|]',Match:Regular)
                        loop ch1#=1 to len(checkstr)
                          loop ch2#=1 to len(clip(lfile))
                            if lfile[ch2#]=checkstr[ch1#]
                              lfile[ch2#]='_'
                            end
                          end
                        end
                      end


Аватара пользователя
RaFaeL
Ветеран
Сообщения: 840
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Контактная информация:

libxlsxwriter for Clarion

Сообщение RaFaeL » 18 Февраль 2019, 11:06

В принципе можно ж в поставку вставить функцию strout=XSLX:Normalize(strin) это обертке не помешает. Давайте тогда оптимальный алгоритм )

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 3910
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

libxlsxwriter for Clarion

Сообщение Игорь Столяров » 18 Февраль 2019, 12:52

RaFaeL писал(а):
18 Февраль 2019, 11:06
Давайте тогда оптимальный алгоритм
Ага ! Идея-то неплохая. ;)
Ваш алгоритм и есть оптимальный - у меня тоже самое, только я тупо перебираю строку всегда. :)
«V» значит Вендетта !

Аватара пользователя
RaFaeL
Ветеран
Сообщения: 840
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Контактная информация:

libxlsxwriter for Clarion

Сообщение RaFaeL » 18 Февраль 2019, 13:18

Код: Выделить всё

    XLSX:Normalize(STRING In_,BYTE valchar_=95),STRING

Код: Выделить всё

XLSX:Normalize PROCEDURE(STRING In_,BYTE valchar_)

  CODE

   l#=len(In_)
   loop i#=1 to l#
     if instring(In_[i#],'/\[]:*?')
       In_[i#]=chr(valchar_)
     end
   end
   if l#>31
     return In_[1:31]
   end
   return In_

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 3910
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

libxlsxwriter for Clarion

Сообщение Игорь Столяров » 18 Февраль 2019, 13:44

RaFaeL писал(а):
18 Февраль 2019, 13:18
XLSX:Normalize
Ура ! Спасибо ! :)
Уже можно смотреть обновление лучшей в мире библиотеки для экспорта в XLSX ? ;)
«V» значит Вендетта !

Аватара пользователя
RaFaeL
Ветеран
Сообщения: 840
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Контактная информация:

libxlsxwriter for Clarion

Сообщение RaFaeL » 18 Февраль 2019, 15:07

Игорь Столяров писал(а):
18 Февраль 2019, 13:44
Уже можно смотреть обновление лучшей в мире библиотеки для экспорта в XLSX ?
Готовую функцию то самостоятельно уж можно в код вставить, думаю

Аватара пользователя
Губин Игорь
Ветеран
Сообщения: 1244
Зарегистрирован: 16 Сентябрь 2005, 15:35
Откуда: Москва

libxlsxwriter for Clarion

Сообщение Губин Игорь » 18 Февраль 2019, 15:13

...
Последний раз редактировалось Губин Игорь 19 Февраль 2019, 12:18, всего редактировалось 1 раз.
Это я только кажусь дураком! На самом деле я полный идиот!

Аватара пользователя
Дед Пахом
Старичок
Сообщения: 2212
Зарегистрирован: 07 Июль 2005, 15:51
Откуда: Москва, Россия

libxlsxwriter for Clarion

Сообщение Дед Пахом » 18 Февраль 2019, 15:16

RaFaeL писал(а):
18 Февраль 2019, 13:18
XLSX:Normalize PROCEDURE(STRING In_,BYTE valchar_)
Эффективнее проверку на >31 в цикл встроить, а то передадут строку размером в гиг, цикл её будет всю по символу перебирать.
С уважением, ДП

Аватара пользователя
Губин Игорь
Ветеран
Сообщения: 1244
Зарегистрирован: 16 Сентябрь 2005, 15:35
Откуда: Москва

libxlsxwriter for Clarion

Сообщение Губин Игорь » 18 Февраль 2019, 15:28

Дед Пахом писал(а):
18 Февраль 2019, 15:16
Эффективнее проверку на >31 в цикл встроить
Если автор не возражает

Код: Выделить всё

XLSX:Normalize PROCEDURE(STRING In_,BYTE valchar_)

  CODE

   l#=len(In_)
   if l# > 31 Then
     l# = 31
   end
   loop i#=1 to l#
     if instring(In_[i#],'/\[]:*?')
       In_[i#]=chr(valchar_)
     end
   end
   return In_[1:l#]
Последний раз редактировалось Губин Игорь 19 Февраль 2019, 11:02, всего редактировалось 1 раз.
Это я только кажусь дураком! На самом деле я полный идиот!

Аватара пользователя
Губин Игорь
Ветеран
Сообщения: 1244
Зарегистрирован: 16 Сентябрь 2005, 15:35
Откуда: Москва

libxlsxwriter for Clarion

Сообщение Губин Игорь » 18 Февраль 2019, 15:33

И ещё немного "защиты от дурака"

Код: Выделить всё

XLSX:Normalize PROCEDURE(STRING In_,BYTE valchar_)


  CODE

   l#=len(In_)
   if l# > 31
     l# = 31
   end
   if instring(chr(valchar_),'/\[]:*?') 
     valchar_ = 95
   end
   loop i#=1 to l#
     if instring(In_[i#],'/\[]:*?')
       In_[i#]=chr(valchar_)
     end
   end
   return In_[1:l#]
Последний раз редактировалось Губин Игорь 19 Февраль 2019, 11:01, всего редактировалось 1 раз.
Это я только кажусь дураком! На самом деле я полный идиот!

Аватара пользователя
RaFaeL
Ветеран
Сообщения: 840
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Контактная информация:

libxlsxwriter for Clarion

Сообщение RaFaeL » 18 Февраль 2019, 16:28

ОК

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 3910
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

libxlsxwriter for Clarion

Сообщение Игорь Столяров » 18 Февраль 2019, 17:00

Ура ! Заработала ! Спасибо ! :)

По преданию, Рафаэль Санти (XVI век) сам делал копии своих знаменитых полотен с мадоннами и продавал
их за бесценок … просто, что бы другие живописцы в желании подзаработать не исказили настоящее искусство …

Колёса вертятся, но ничего не меняется. :idied:
«V» значит Вендетта !

Аватара пользователя
Губин Игорь
Ветеран
Сообщения: 1244
Зарегистрирован: 16 Сентябрь 2005, 15:35
Откуда: Москва

libxlsxwriter for Clarion

Сообщение Губин Игорь » 19 Февраль 2019, 11:06

Игорь Столяров писал(а):
18 Февраль 2019, 17:00
По преданию, Рафаэль Санти (XVI век) сам делал копии своих знаменитых полотен с мадоннами и продавал
их за бесценок … просто, что бы другие живописцы в желании подзаработать не исказили настоящее искусство …

Я, в данной ситуации, предпочитаю считать себя реинкарнацией Хана Ван Мегина :cat:
Это я только кажусь дураком! На самом деле я полный идиот!

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 3910
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

libxlsxwriter for Clarion

Сообщение Игорь Столяров » 19 Февраль 2019, 11:32

Сам такой - хочется нафигачить всего и побольше. :)

Что в общем-то и сделал: экспорт разделителей, чисел по формату, картинок вписанных в квадрат с отступами,
установка высоты строки для объединённых ячеек по длине текста и т.д.

Но есть тонкая грань - что действительно нужно в базовом классе, а что локальные надуманные доделки … ;)
«V» значит Вендетта !

Аватара пользователя
finsoftrz
Ветеран
Сообщения: 1054
Зарегистрирован: 06 Ноябрь 2014, 12:48

libxlsxwriter for Clarion

Сообщение finsoftrz » 19 Февраль 2019, 14:08

Кстати, а в последних версиях ms office файлики нормально читаются? Я полгода назад одному товарищу отправлял, у него вылезали разные сообщения об ошибках, хотя открыть он смог. При этом в опенах все открывалось без проблем. Какое там состояние на сегодня?
Рязань решает.

Ответить