:: Visual Foxpro, Foxpro for DOS
Re: Как легко сохранить файл в кодировке UTF-8
akvvohinc

Сообщений: 4219
Откуда: Москва
Дата регистрации: 11.11.2008
Crispy
Все делалось за доли секунды, даже не измерял, не было нужды. Миг какой-то мизерный. И повторю все это делалось в FPD2.6, где каких-то иных возможностей не сказать, чтобы так уж много. Их попросту нет.

Тогда тебе может быть интересно, что такое STUFF(), пусть проблема конвертации уже и не актуальна.
Главное, оцени динамику - прогрессия там вовсе не арифметическая (причем, я даже до 1 Mb не дошёл).
(алгоритм я не менял)
CLEAR
FOR m.len=100000 TO 400000 STEP 100000
m.s = REPL('Ш',m.len)
time1 = SECOND()
s_utf8 = crispy(m.s)
m.duration1 = SECOND()-m.time1
? 'Длина = '+TRAN(m.len)+' - crispy отработала за '+TRAN(m.duration1)+' сек.'
time1 = SECOND()
s_utf8 = crispy_new(m.s)
m.duration2 = SECOND()-m.time1
? 'Длина = '+TRAN(m.len)+' - crispy_new отработала за '+TRAN(m.duration2)+' сек.'+;
TRAN(m.duration1/m.duration2,' (в 99 раз быстрее)')
?
ENDFOR
************************************************************
* CRISPY *
************************************************************
FUNCTION crispy
* 1251 or 866 code page -> in UTF
LPARAMETERS p,v
PRIVATE p,n,v
v=IIF(PARAMETERS()=1,.T.,.F.)
p=ALLTRIM(p)
FOR i=LEN(p) TO 1 STEP -1
n=ASC(SUBSTR(p,i,1))
IF v && for Win
p=STUFF(p,i,1,IIF(BETWEEN(n,192,239),CHR(208)+CHR(n-48),;
IIF(BETWEEN(n,240,255),CHR(209)+CHR(n-112),IIF(n=168,CHR(208)+CHR(129),;
IIF(n=184,CHR(209)+CHR(145),CHR(n))))))
ELSE && for DOS
p=STUFF(p,i,1,IIF(BETWEEN(n,128,175),CHR(208)+CHR(n+16),;
IIF(BETWEEN(n,224,239),CHR(209)+CHR(n-96),IIF(n=240,CHR(208)+CHR(129),;
IIF(n=241,CHR(209)+CHR(145),CHR(n))))))
ENDIF
ENDFOR
RETURN p
************************************************************
* CRISPY_NEW *
************************************************************
FUNCTION crispy_new
* 1251 or 866 code page -> in UTF
LPARAMETERS p,v
LOCAL ret,i,n
m.v = PARAMETERS()=1
m.p = ALLTRIM(m.p)
m.ret = ''
FOR i=1 TO LEN(p)
n=ASC(SUBSTR(p,i,1))
IF v && for Win
m.ret = m.ret+IIF(BETWEEN(n,192,239),CHR(208)+CHR(n-48),;
IIF(BETWEEN(n,240,255),CHR(209)+CHR(n-112),IIF(n=168,CHR(208)+CHR(129),;
IIF(n=184,CHR(209)+CHR(145),CHR(n)))))
ELSE && for DOS
m.ret = m.ret+IIF(BETWEEN(n,128,175),CHR(208)+CHR(n+16),;
IIF(BETWEEN(n,224,239),CHR(209)+CHR(n-96),IIF(n=240,CHR(208)+CHR(129),;
IIF(n=241,CHR(209)+CHR(145),CHR(n)))))
ENDIF
ENDFOR
RETURN ret



Исправлено 7 раз(а). Последнее : akvvohinc, 10.02.21 22:29
Ratings: 0 negative/0 positive
Re: Как легко сохранить файл в кодировке UTF-8
Crispy

Сообщений: 18571
Дата регистрации: 16.05.2005
akvvohinc
Тогда тебе может быть интересно, что такое STUFF(), пусть проблема конвертации уже и не актуальна.

Да я и не спорю по этому поводу.
Вопрос в другом. В размере максимально возможной в FPD обрабатываемой строки.
А этот размер таков, что разница в микросекунды неактуальна вообще даже на каком-нибудь Пентиум-133. ;)
Тем более, ты предлагаешь вытаскивать по одному символу вместо обработки целой строки - что в данной ситуации не имеет какого-то особого смысла, создавая лишь лишние заморочки. Да, неоптимальная команда. Но зато всего лишь одного "слово" - вместо кучи символов, строк. Что для возможных параметров строки для обработки в любом случае превалирует благодаря большей простоте и удобству.
И что определило кстати когда-то создание и повсеместное применение именно языков высокого уровня вместо намного более скоростного в принципе ассемблера. Пишешь одно слово и не заботишься ни о чем. Железо давным-давно решило все проблемы такого подхода.


------------------
В действительности все иначе, чем на самом деле.
                                      (Антуан де Сент-Экзюпери)
Ratings: 0 negative/0 positive
Re: Как легко сохранить файл в кодировке UTF-8
Crispy

Сообщений: 18571
Дата регистрации: 16.05.2005
leonid
Crispy
Оно в FPD же и не загрузится по любому. Там ведь предел строки совсем мизерный был - это тебе не VFP!

[attachment 34778 fpd.jpg]

Ну дак ты попробуй - передай эту строку в качестве параметра в собственную функцию!
Будешь очень удивлен я думаю. ;)


------------------
В действительности все иначе, чем на самом деле.
                                      (Антуан де Сент-Экзюпери)
Ratings: 0 negative/0 positive
Re: Как легко сохранить файл в кодировке UTF-8
leonid

Сообщений: 3204
Откуда: Рига
Дата регистрации: 03.02.2006
Crispy
Ну дак ты попробуй

Лет этак 25 - 30 назад я бы, пожалуй, последовал этому совету. А сейчас... Нет, некрофилия - это не мое.
Ratings: 0 negative/1 positive
Re: Как легко сохранить файл в кодировке UTF-8
Crispy

Сообщений: 18571
Дата регистрации: 16.05.2005
leonid
Crispy
Ну дак ты попробуй

Лет этак 25 - 30 назад я бы, пожалуй, последовал этому совету. А сейчас... Нет, некрофилия - это не мое.

А зачем тогда в вопросе, проблемы которого лично для меня тоже давно уже как бы не актуальны, приводить выдержки о поистине гигантском размере допустимых возможностей работы со строкой в этой древней среде FPD? ;) Тем более в приведенной цитате говорится все же несколько о другом.
Если бы FPD реально мог работать со строками в 2 ГБ - это было бы поистине чудо для своего времени.
То, что кто-то все еще работает сегодня с ним - видимо всего лишь сочетание необходимости минимизации трудозатрат на обновление и случая, выражающегося в существовании клиентов, нисколько не возражающих против предоставляемых им такими программами возможностей.
Где-то это есть, где-то - давно уже нет. Везде свои нюансы, свои требования и свои возможности.
Такова жизнь, как говорят французы.


------------------
В действительности все иначе, чем на самом деле.
                                      (Антуан де Сент-Экзюпери)
Ratings: 0 negative/0 positive
Re: Как легко сохранить файл в кодировке UTF-8
akvvohinc

Сообщений: 4219
Откуда: Москва
Дата регистрации: 11.11.2008
Crispy
Ну дак ты попробуй - передай эту строку в качестве параметра в собственную функцию!

Я не знаю, о каком размере ты говоришь (видимо, о 2Гб).
Я у себя проверил передачу строки в 14 Мб - проблем нет.
Начиная с какого-то момента (точно не выяснял) появляется сообщение "Insufficient memory", только и всего.
Возможно, будь у меня больше ОЗУ, и передать можно было бы более длинную строку.

А что будет с оригинальной функцией даже на 400 Кб, я показал выше.
Ratings: 0 negative/0 positive
Re: Как легко сохранить файл в кодировке UTF-8
akvvohinc

Сообщений: 4219
Откуда: Москва
Дата регистрации: 11.11.2008
Crispy
А зачем тогда в вопросе, проблемы которого лично для меня тоже давно уже как бы не актуальны, приводить выдержки о поистине гигантском размере допустимых возможностей работы со строкой в этой древней среде FPD?

Это был всего лишь ответ на твое неверное утверждение:
Цитата:
Там ведь предел строки совсем мизерный был - это тебе не VFP!
Ratings: 0 negative/0 positive
Re: Как легко сохранить файл в кодировке UTF-8
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
Crispy
Где-то это есть, где-то - давно уже нет. Везде свои нюансы, свои требования и свои возможности.
Такова жизнь, как говорят французы.

За бугром, например, в Испании и Италии, и в небольших, и в крупных маркетах наблюдал, что на кассах работает FPD, причем кое-где даже на ч/б терминалах (не старых, а вполне себе современных, но компактных). Конечно, не могу утверждать на 100%, что это был FPD, но по всем внешним признакам именно так. И народ абсолютно "не парится" по этому поводу. Скорее даже не народ, а собственники заведений. Насчет Франции и Германии не скажу - как-то там у них хрен увидишь, что за кассой происходит.



Исправлено 2 раз(а). Последнее : Simple777, 11.02.21 15:11
Ratings: 0 negative/0 positive
Re: Как легко сохранить файл в кодировке UTF-8
akvvohinc

Сообщений: 4219
Откуда: Москва
Дата регистрации: 11.11.2008
Цитата:
Тем более, ты предлагаешь вытаскивать по одному символу вместо обработки целой строки - что в данной ситуации не имеет какого-то особого смысла, создавая лишь лишние заморочки.

Только сейчас обратил внимание на эту фразу.
Я ничего не предлагал вытаскивать по одному символу - я полностью, вплоть до "вытаскивания", сохранил твой алгоритм!

Это вытаскивание сделал ты:
n=ASC(SUBSTR(p,i,1))

Просто ты этот "вытащенный символ" заменяешь в исходной строке, а я заменяющие символы плюсую к результирующей, за счет чего и получаю разницу по времени исполнения в 10 и более раз.

Что в моем коде "лишние заморочки" известно лишь тебе.
Покажи их!

Действительно лишняя заморочка - это STUFF()!



Исправлено 2 раз(а). Последнее : akvvohinc, 11.02.21 15:38
Ratings: 0 negative/0 positive
Re: Как легко сохранить файл в кодировке UTF-8
Crispy

Сообщений: 18571
Дата регистрации: 16.05.2005
Да и фиг бы с ним. Там такая мелочь несущественная.
Вот охота же кому-то спорить о микронной точности при изготовлении лома для чистки льда.



------------------
В действительности все иначе, чем на самом деле.
                                      (Антуан де Сент-Экзюпери)
Ratings: 0 negative/0 positive
Re: Как легко сохранить файл в кодировке UTF-8
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
Точность - вежливость королей!.. \m/
Ratings: 0 negative/0 positive
Re: Как легко сохранить файл в кодировке UTF-8
akvvohinc

Сообщений: 4219
Откуда: Москва
Дата регистрации: 11.11.2008
Crispy
Там такая мелочь несущественная.
akvvohinc
за счет чего и получаю разницу по времени исполнения в 10 и более раз.

Ok, тогда я писал тем, кто не сочтёт это мелочью. :beer2:
Ratings: 0 negative/0 positive
Re: Как легко сохранить файл в кодировке UTF-8
Crispy

Сообщений: 18571
Дата регистрации: 16.05.2005
akvvohinc
Ok, тогда я писал тем, кто не сочтёт это мелочью. :beer2:

Думаю сегодня это уже не актуально.
В VFP9 такое преобразование вообще не имеет смысла. А FPD сегодня используют только избранные.
Кстати в "слабости" STUFF при работе в VFP со строками довелось убедиться уже тоже давно. Когда при разборке html вроде, эта, в принципе удобная, команда отказалась вдруг проглотить длинную строку. Пришлось тогда придумывать обходные пути, не помню уж, через fread/fwrite или как-то еще. Т.е. видимо они ее так и не переработали толком под "новые реалии". [sm128]
В этом отношении жаль конечно, что фокспро "позабыт позаброшен с молодых юных лет".


------------------
В действительности все иначе, чем на самом деле.
                                      (Антуан де Сент-Экзюпери)
Ratings: 0 negative/0 positive
Re: Как легко сохранить файл в кодировке UTF-8
lulgu

Сообщений: 1838
Дата регистрации: 30.11.2016
Crispy
Думаю сегодня это уже не актуально.

С таким халтурным отношением даже STUFF вовек не выучишь.
Ratings: 0 negative/0 positive
Re: Как легко сохранить файл в кодировке UTF-8
Каратаев

Сообщений: 3977
Откуда: Алматы
Дата регистрации: 04.12.2001
Crispy
В VFP9 такое преобразование вообще не имеет смысла.
Ну почему-же? Или это про какое-то конкретное преобразование? Если речь про "В принципе", то у меня, например, так создаются CSV-файлы для выгрузки данных на сайт. Выше приводил код:
lcString = STRCONV(lcString,9)
Или это про метод с участием STUFF?


------------------
Никогда не бывает настолько плохо, чтобы не могло быть еще хуже.
Ratings: 0 negative/0 positive
Re: Как легко сохранить файл в кодировке UTF-8
Crispy

Сообщений: 18571
Дата регистрации: 16.05.2005
lulgu
Crispy
Думаю сегодня это уже не актуально.

С таким халтурным отношением даже STUFF вовек не выучишь.

Почему ты не пишешь все время под своим основным логином?
Зачем это все? :al:


------------------
В действительности все иначе, чем на самом деле.
                                      (Антуан де Сент-Экзюпери)
Ratings: 0 negative/0 positive
Re: Как легко сохранить файл в кодировке UTF-8
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
Crispy
Зачем это все? :al:

Цитата:
Зачем? Что общего меж нами?
Ты жить идешь, я ухожу...
:rux:
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 19 (Гостей: 19)

© 2000-2024 Fox Club 
Яндекс.Метрика