Страницы: 1
RSS
Требуется помощь с разбором сериализованой PHP строки с выводом данных (с помощью VBA) в таблицу
 
Получаю данные о заказе с сайта в формате сериализованой PHP строки:

Скрытый текст

Есть код, взятый отсюда unserialize.bas
Скрытый текст


Помогите извлечь данные средствами VBA в формате прикрепленного изображения
 
Цитата
AVZaitsev написал: Есть код...
Что это за код? Рабочий? Для чего Вы его тут привели?
Согласие есть продукт при полном непротивлении сторон
 
Цитата
Sanja написал:
Рабочий?
В том варианте, в котором выложил, рабочий, только нужно немного доработать, в title и description неверно указано количество символов
 
А входной файл не кривой?.
Ругается РНР однако.
Notice: unserialize(): Error at offset 5569 of 8464 bytes
 
Цитата
doober написал:
Ругается РНР однако.
В том то все и дела, что данные правильные и на сайте заказ верно отображается
 
Я не не понимаю, как это может быть.
Функция PHP  unserialize() выдает ошибку, значит сам файл сформирован или передан  не правильно.
Изменено: doober - 27.04.2019 21:41:30
 
Скрытый текст
данные в текстовике. Подсунь(те?) свою переменную
Изменено: Александр Моторин - 28.04.2019 02:25:36
 
Цитата
Александр Моторин написал:
данные в текстовике
Спасибо огромное. Немного доработал, т.к. в
Цитата
uu = Split(u, ";")
и
t = Split(uu(c + 1), ":")
была ошибка Type mismatch. Вот рабочий вариант
Код
Sub qwerty(s)
   Dim r, i, u, uu, c, zag: sag = Split(",title,barcode,quantity,price,discount", ",")
   Dim rz(), t
   u = Split(s, "{s")
   ReDim rz(UBound(u), 1 To 5)
   For c = 1 To UBound(sag)
       rz(0, c) = sag
   Next c

   For r = 1 To UBound(u)
       i = i + 1
       ui = u(i)
       uu = Split(ui, ";")
       i1 = 0
       For c = 1 To UBound(uu)
           uui = uu(i1)
           If InStr(1, uui, "title", vbTextCompare) > 0 Then
               i2 = i1 + 1
               uui = uu(i2)
               t = Split(uui, ":")
               rz(r, 1) = t(UBound(t))
           End If
           
           If InStr(1, uui, "barcode", vbTextCompare) > 0 Then
               i2 = i1 + 1
               uui = uu(i2)
               t = Split(uui, ":")
               rz(r, 2) = t(UBound(t))
           End If
           
           If InStr(1, uui, "quantity", vbTextCompare) > 0 Then
               i2 = i1 + 1
               uui = uu(i2)
               t = Split(uui, ":")
               rz(r, 3) = t(UBound(t))
           End If
           
           If InStr(1, uui, "price", vbTextCompare) > 0 Then
               i2 = i1 + 1
               uui = uu(i2)
               t = Split(uui, ":")
               rz(r, 4) = t(UBound(t))
           End If
           
           If InStr(1, uui, "discount", vbTextCompare) > 0 Then
               i2 = i1 + 1
               uui = uu(i2)
               t = Split(uui, ":")
               rz(r, 5) = t(UBound(t))
           End If
           i1 = i1 + 1
       Next c
   Next r
   
   Sheets(3).Cells(12, 1).Resize(UBound(rz) + 1, UBound(rz, 2)) = rz
   Sheets(3).Cells(12, 1).Resize(UBound(rz) + 1, UBound(rz, 2)).Columns.AutoFit

End Sub 

Изменено: AVZaitsev - 28.04.2019 09:57:53
Страницы: 1
Наверх