On-line: гостей 1. Всего: 1 [подробнее..]
АвторСообщение
администратор




Пост N: 1865
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 15.12.22 14:02. Заголовок: hb_hCaseMatch() в RU2151


не понимаю как заставить хеш массив игнорировать регистр ключа . С латиницей работает отлично, но если ключ в кириллице , то никакие hb_hCaseMatch() не помогают.
Может что еще нужно прописать чтоб нормально игнорировался регистр ?
 
func main()
local aHash := hb_Hash()


REQUEST HB_CODEPAGE_RU1251
hb_cdpSelect( "RU1251" )


hb_hCaseMatch( aHash, .F. )
hb_hSet( aHash, "тест", "тест пройден" )

? "ключ в верхний регистр", if( hb_hHasKey(aHash, "ТЕСТ") , aHash["ТЕСТ"] , "ключ не найден" )
? "ключ в нижний регистр", if( hb_hHasKey(aHash, "тест") , aHash["тест"] , "ключ не найден" )


wait

return nil


результат такой
 
ключ в верхний регистр ключ не найден
ключ в нижний регистр тест пройден
Press any key to continue...
ключ в нижний регистр тест пройден

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 27 , стр: 1 2 All [только новые]


администратор




Пост N: 1871
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 20.12.22 21:28. Заголовок: SergKis пишет: json..


SergKis пишет:

 цитата:
json 5)


Ну только разбором строки т.к. hb_jsonDecode() не понимает json 5 и , соответственно, хеш массив не сформирует.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4190
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 20.12.22 21:52. Заголовок: Haz пишет Ну только ..


Haz пишет
 цитата:
Ну только разбором строки


Это 2-ой случай, когда дают таблицы в json 5, правда не сложные и пока обхожусь вариантом привода к json
 
j := SubS( J, At ("{", j) )
j := Left( J, RAt("}", j) )
j := left(j, 2)+'"'+subs(j, 3)
j := StrTran(j, ":", '":')
j := StrTran(j, ", ", ', "')
j := StrTran(j, "'", '"')
a := hb_jsonDecode(j)
? j
? "получена длинна массива:",len(a)
получаем строку
{ "recid": 1, "fname": "John", "lname": "Doe", "email": "john@gmail.com", "profit": 2500, "sdate": "1/3/2012" }
получена длинна массива: 6

Но если что то сложнее, то придется разбирать.
Думал, что ты сталкивался, потому спросил.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1872
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 20.12.22 22:06. Заголовок: SergKis пишет: Дума..


SergKis пишет:

 цитата:
Думал, что ты сталкивался, потому спросил.

Сергей, так тут вариантов нет, только строку парсить.
Сталкивался, при разборе скачанного HTML .
К сожалению поддержки 5 версии в харбуре нет, все только строковыми операциями и каждый раз индивидуально.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1873
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 21.12.22 09:04. Заголовок: SergKis пишет: Как ..


SergKis пишет:

 цитата:
Как обрабатываешь такие строки (json 5) ?


Сергей, глянь здесь.
Вдруг пригодится.
https://github.com/imsys/JSON-ADVPL/blob/master/lib/JSON.prg

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4191
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 21.12.22 12:49. Заголовок: Haz пишет глянь здес..


Haz пишет
 цитата:
глянь здесь


Спасибо
Попробовал взять строку json (из примера по ссылке) через hb_jsonDecode() :
{"Products": [{"Name": "Water", "Cost": 1.3}, {"Name": "Bread", "Cost": 4e-1}], "Users": [{"Name": "Arthur", "Comment": "Hello\" \\World"}]}
работает и без ф-ии из ссылки
 
j := hb_memoread(".\_c_.json")
j := StrTran(j, '\"', "")
j := StrTran(j, '\\', "")
a := hb_jsonDecode(j)
? ".\_c_.json", a,"получена длинна массива:",len(a)
for i:=1 to len(a)
? hb_hKeyAt(a,i),"=>",v:=hb_hValueAt(a,i),valtype(v)
? i, v
for each m in v
? hb_valtoexp(m)
next
next
?
результат
Harbour MiniGUI Extended Edition 22.12.1 (32-bit) ANSI
.\_c_.json HASH[2] получена длинна массива: 2
Products => ARRAY[2] A
1 ARRAY[2]
{"Name"=>"Water", "Cost"=>1.3}
{"Name"=>"Bread", "Cost"=>0.4}
Users => ARRAY[1] A
2 ARRAY[1]
{"Name"=>"Arthur", "Comment"=>"Hello World"}


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1874
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 21.12.22 23:18. Заголовок: SergKis пишет: Попр..


SergKis пишет:

 цитата:
Попробовал взять строку json (из примера по ссылке)

ну так там , в отличии от твоей строки есть ключ массива и все ключи в массиве с кавычками. Можно приводить строку к "стандартному" виду, а можно функцию аналог hb_jsondecode() под себя подправить. Все зависит от того как часто и что приходится делать.
Как показал мой опыт, этот путь бесконечен. Только вроде все сделал, и тут json с левой резьбой...

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4192
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 21.12.22 23:47. Заголовок: Haz пишет Только вро..


Haz пишет
 цитата:
Только вроде все сделал, и тут json с левой резьбой...


На эту тему были мысли использовать php (к LetoDbf прикручивается) или js, но пока необходимости не было,
json 5 -> json просто переводился.

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 27 , стр: 1 2 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 99
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет