Что нового

[Данные, строки] Выделение куска строки

modnik

Знающий
Сообщения
138
Репутация
13
Добрый день!


Есть строка

Код:
{"success":true,"lowest_price":"84,48 p\u0443\u0431.","volume":"104","median_price":"79 p\u0443\u0431."}

Мне необходимо получить из неё значение , которое идёт после "lowest_price":" , т.е 84,48

Я нашёл похожую тему, но так и не смог раскатать на свою строку. http://autoit-script.ru/index.php?topic=2185.0

Прошу помочь разобраться
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Код:
Global $oData, $sCode, $sResult
$sCode = '{"success":true,"lowest_price":"84,48 p\u0443\u0431.","volume":"104","median_price":"79 p\u0443\u0431."}'
$oData = _jsonDecode($sCode)
If @error Then Exit @error
$sResult = $oData.lowest_price
$sResult = StringRegExpReplace($sResult, '[^\d,]+', '')
MsgBox(0, "lowest_price", $sResult )

Func _jsonDecode($sStr)
	Local $oSC = ObjCreate("ScriptControl")
	If Not IsObj($oSC) Then Return SetError(1, 0, 0)
	$oSC.Language = "JavaScript"
	$sStr = StringRegExpReplace($sStr, '[\r\n]', ' ')
	$sStr = StringReplace($sStr, "'", "\'")
	$oResult = $oSC.Eval("eval('(" & $sStr & ")');")
	If Not IsObj($oResult) Then Return SetError(2, 0, 0)
	Return $oResult
EndFunc   ;==>_jsonDecode


modnik сказал(а):
Я нашёл похожую тему, но так и не смог раскатать на свою строку.
Темы про JSON: раз, два.
 
Автор
M

modnik

Знающий
Сообщения
138
Репутация
13
Спасибо большое на конкретной строке всё работает, но я попытался прикрутить этот код к веб странице и столкнулся с трудностями. Как я понимаю, что когда я копирую хтмл код страницы, то она перестаёт быть json и не работает
Код:
$oIE = _IECreate("")
$sCode =_IEDocReadHTML($oIE)
$oData = _jsonDecode($sCode)
MsgBox(0, "lowest_price", $sCode)
If @error Then Exit @error
$sResult = $oData.lowest_price
$sResult = StringRegExpReplace($sResult, '[^\d,]+', '')
MsgBox(0, "lowest_price", $sResult )
 

Sln

Знающий
Сообщения
45
Репутация
5
:blink:
Код:
$str = '{"success":true,"lowest_price":"84,48 p\u0443\u0431.","volume":"104","median_price":"79 p\u0443\u0431."}'

$price = StringRegExp($str, '(?i)lowest_price\D*(\d+)\D+(\d+)', 2)

If @error Then	Exit

MsgBox(0, @ScriptName, 'Price is -> ' & $price[1] & ' и ' & $price[2])


или
Код:
$price = StringRegExp($str, '(?i)lowest_price\D*([\d\,]+)', 2)
MsgBox(0, @ScriptName, 'Price is -> ' & $price[1])
 
Автор
M

modnik

Знающий
Сообщения
138
Репутация
13
А как прописать если возникает ошибка то просто продолжить программу?
 

Sln

Знающий
Сообщения
45
Репутация
5
Код:
$str = '{"success":true,"lowest_price":"84,48 p\u0443\u0431.","volume":"104","median_price":"79 p\u0443\u0431."}'

$price = StringRegExp($str, '(?i)lowest_price\D*([\d\,]+)', 2)

If @error Then Local $price[2] = ['', 'грош цена']

MsgBox(0, @ScriptName, 'Price is -> ' & $price[1])
 
Автор
M

modnik

Знающий
Сообщения
138
Репутация
13
Спасибо большое, всё работает.
Есть вопросы, а как прописать в следующем коде
Код:
$aTableData = _IETableWriteToArray ($oTable, True)
_ExcelWriteCell($oExcel,$aTableData[1][0], 'M' & $i)
_ExcelWriteCell($oExcel,$aTableData[2][0], 'N' & $i)
_ExcelWriteCell($oExcel,$aTableData[3][0], 'O' & $i)
_ExcelWriteCell($oExcel,$aTableData[4][0], 'P' & $i)
_ExcelWriteCell($oExcel,$aTableData[5][0], 'Q' & $i)


Тоже самое про ошибку, т.е если ошибка то просто заносим значение и продолжаем программу.

И ещё последний вопрос. значение попадаемые в $$aTableData[1][0] итд, попадают туда с точкой, типа 36.01 и тд. Можно ли точку заменить на запятую?
 

Sln

Знающий
Сообщения
45
Репутация
5
OffTopic:
надо создать новую тему... имхо :smile:
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
modnik [?]
Есть вопросы, а как прописать в следующем коде

Предупреждение За нарушение общих правил (пункт В.4):
Не лепите несколько вопросов разной тематики в один пост. По типу "Ребят, а ещё такой вопрос...". Каждый вопрос в свою тему.


С уважением, ваш Глобальный модератор.
 
Верх