Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / разбор строковой переменной / 17 сообщений из 17, страница 1 из 1
17.06.2014, 12:30
    #38671577
PlanB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
разбор строковой переменной
Добрый день!

Задача состоит в том, чтобы сформировать список "id" и соответствующих им записей "licence" по следующей ссылке . Я предполагаю следующую последовательность действий. Читаю html код страницы, ищу строку "var banksList =" и читаю все содержимое в строковую переменную. После чего ее можно парсить по запятым. Вот с этим делом проблемы, вроде ничего сложного, но у меня не выходит.

Пример исходных данных:

[{"id":"190503","name":"2Т Банк","licence":"625"},{"id":"196048","name":"АББ","licence":"2937"},{"id":"9259","name":"Абсолют Банк","licence":"2306"}];

В результате хочется иметь таблицу в excel вида
idlicence190503625196048293792592306

Помогите с реализацией кода! Спасибо!

PS каков максимальный объем строковой переменной, у меня выходит около 110 тыс знаков. влезет?
...
Рейтинг: 0 / 0
17.06.2014, 12:34
    #38671585
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
разбор строковой переменной
PlanBвлезет?влезет
PlanBне выходит.а в чем конкретно проблема? про Split ты вроде в курсе...
...
Рейтинг: 0 / 0
17.06.2014, 12:46
    #38671611
PlanB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
разбор строковой переменной
Shocker.Pro, привет! да, в курсе. ну там много всякой гадости. запятые, скобки, ковычки. по всем по очереди пройтись?
...
Рейтинг: 0 / 0
17.06.2014, 13:33
    #38671716
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
разбор строковой переменной
Делать каскадный сплит.
Сначала по },{
Потом по запятой
Потом по двоеточию
...
Рейтинг: 0 / 0
17.06.2014, 13:35
    #38671722
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
разбор строковой переменной
не
сначала по },{
потом по кавычка запятая кавычка
потом по кавычка двоеточие кавычка

при этом не забывать подрезать крайние скобки, кавычки и т.п.
если там несколько элементов массива, тогда еще самый первый сплит по ],[
...
Рейтинг: 0 / 0
17.06.2014, 14:11
    #38671786
PlanB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
разбор строковой переменной
Shocker.Pro, у меня с массивами все очень печально =((( вот и не выходит
...
Рейтинг: 0 / 0
17.06.2014, 14:14
    #38671793
PlanB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
разбор строковой переменной
PlanBShocker.Pro, у меня с массивами все очень печально =((( вот и не выходитно я вроде допер
...
Рейтинг: 0 / 0
17.06.2014, 14:18
    #38671797
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
разбор строковой переменной
у тебя с VB-массивами печально или с JSON-массивами?
...
Рейтинг: 0 / 0
17.06.2014, 16:39
    #38672021
PlanB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
разбор строковой переменной
Shocker.Proу тебя с VB-массивами печально или с JSON-массивами? я такую аббревиатуру не видел-то
...
Рейтинг: 0 / 0
17.06.2014, 16:55
    #38672057
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
разбор строковой переменной
[{"id":"190503","name":"2Т Банк","licence":"625"},{"id":"196048","name":"АББ","licence":"2937"},{"id":"9259","name":"Абсолют Банк","licence":"2306"}];это данные в вышеуказанном формате )
...
Рейтинг: 0 / 0
17.06.2014, 17:18
    #38672104
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
разбор строковой переменной
а в VB какой версии это нужно сделать?
...
Рейтинг: 0 / 0
17.06.2014, 17:38
    #38672133
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
разбор строковой переменной
Серега в VBA работает ))
...
Рейтинг: 0 / 0
17.06.2014, 17:47
    #38672144
VSVLAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
разбор строковой переменной
PlanB,

Поищите/погуглите готовые классы для JSON - попробуете скормить, если пройдёт - облегчите себе жизнь, если нет - прийдётся парсить вручную. Хотя опять же можно выхитриться с помощью ScriptControl (используя JS сожрать через eval, на выходе получаем объект JS, останется написать обёртку к полученным данным)
...
Рейтинг: 0 / 0
17.06.2014, 19:03
    #38672273
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
разбор строковой переменной
VSVLADиспользуя JS сожрать через eval, на выходе получаем объект JS, останется написать обёртку к полученным даннымНе все так просто, на выходе получаем текст "[object Object],[object Object],[object Object]".

Нужно внедрить объект с методом, который будет принимать в качестве параметров id и licence, а евалить цикл, который пробежится по массиву и надергает из него значений:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
'модуль:

Public Type BankLicence
    id As Long
    licence As Long
End Type

Sub Start()
Dim sc As New ScriptControl
Dim cl As New Class1
    sc.Language = "jscript"
    sc.AddCode "var banksList = [{""id"":""190503"",""name"":""2Т Банк"",""licence"":""625""},{""id"":""196048"",""name"":""АББ"",""licence"":""2937""},{""id"":""9259"",""name"":""Абсолют Банк"",""licence"":""2306""}];"
    sc.AddObject "Class1", cl
    sc.Eval "for(var x=0;x<banksList.length;x++)Class1.Add(banksList[x].id,banksList[x].licence)"
    Debug.Print UBound(cl.BankLicences)
End Sub

'класс:

Dim lBankLicences() As BankLicence
Dim lIndex As Integer

Friend Property Get BankLicences() As BankLicence()
    BankLicences = lBankLicences
End Property

Public Sub Add(ByVal id As Long, ByVal licence As Long)
    lIndex = lIndex + 1
    ReDim Preserve lBankLicences(lIndex)
    lBankLicences(lIndex).id = id
    lBankLicences(lIndex).licence = licence
End Sub

Private Sub Class_Initialize()
    lIndex = -1
End Sub
...
Рейтинг: 0 / 0
18.06.2014, 10:25
    #38672605
VSVLAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
разбор строковой переменной
Antonariy,

Да, примерно такое решение. Я всё таки добрался до нужных элементов в объекте JS. Правда нужно соблюдать регистр, т.е. например чтобы получить элемент "name", то xBank.Name - Среда автоматически ставит, поэтому или в исходном JSON отреплейсить в верхний регистр "name" -> "Name", или подумать, может есть ещё какой способ.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Sub Start()
    Dim sc As New ScriptControl
    Dim xItem As Variant
    
    sc.Language = "jscript"
    sc.AddCode "var banksList = [{""id"":""190503"",""name"":""2Т Банк"",""licence"":""625""},{""id"":""196048"",""name"":""АББ"",""licence"":""2937""},{""id"":""9259"",""name"":""Абсолют Банк"",""licence"":""2306""}];"
    
    For Each xBank In sc.CodeObject.banksList
        Debug.Print xBank.id & vbTab & xBank.licence
    Next
End Sub
...
Рейтинг: 0 / 0
18.06.2014, 11:06
    #38672682
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
разбор строковой переменной
О, про CodeObject не знал, так конечно проще.
...
Рейтинг: 0 / 0
18.06.2014, 14:12
    #38672981
ZVI
ZVI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
разбор строковой переменной
VSVLAD... Правда нужно соблюдать регистр, т.е. например чтобы получить элемент "name", то xBank.Name - Среда автоматически ставит, поэтому или в исходном JSON отреплейсить в верхний регистр "name" -> "Name", или подумать, может есть ещё какой способ .
Достаточно написать Dim name, id, licence
а потом это можно и удалить/закомментировать - среда запомнит
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / разбор строковой переменной / 17 сообщений из 17, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]