Форум » [x]Harbour » hb_hCaseMatch() в RU2151 » Ответить

hb_hCaseMatch() в RU2151

Haz: не понимаю как заставить хеш массив игнорировать регистр ключа . С латиницей работает отлично, но если ключ в кириллице , то никакие hb_hCaseMatch() не помогают. Может что еще нужно прописать чтоб нормально игнорировался регистр ? [pre2] 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 [/pre2] результат такой [pre2] ключ в верхний регистр ключ не найден ключ в нижний регистр тест пройден Press any key to continue... [/pre2] ключ в нижний регистр тест пройден

Ответов - 27, стр: 1 2 All

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

SergKis: Haz пишет Ну только разбором строки Это 2-ой случай, когда дают таблицы в json 5, правда не сложные и пока обхожусь вариантом привода к json [pre2] 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 [/pre2] Но если что то сложнее, то придется разбирать. Думал, что ты сталкивался, потому спросил.

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


Haz: SergKis пишет: Как обрабатываешь такие строки (json 5) ? Сергей, глянь здесь. Вдруг пригодится. https://github.com/imsys/JSON-ADVPL/blob/master/lib/JSON.prg

SergKis: Haz пишет глянь здесь Спасибо Попробовал взять строку json (из примера по ссылке) через hb_jsonDecode() : {"Products": [{"Name": "Water", "Cost": 1.3}, {"Name": "Bread", "Cost": 4e-1}], "Users": [{"Name": "Arthur", "Comment": "Hello\" \\World"}]} работает и без ф-ии из ссылки[pre2] 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"} [/pre2]

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

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



полная версия страницы