Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.10.2011, 20:06   #1
raks123
 
Регистрация: 02.10.2011
Сообщений: 3
Плохо Вывод массива из скрипта. C++\Qt

Есть такая задача: передаем строку в скрипт, а выводим из него численный массив. Я делаю так:


QScriptEngine engine;

QString fileName(":/script.js");
QFile scriptFile(fileName);
scriptFile.open(QIODevice::ReadOnly );
QTextStream stream(&scriptFile);
QString contents = stream.readAll();
scriptFile.close();

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

QString stroka ("12345123");

- Вот строка. взял её так просто, нужно понять принцип, а потом усложнять

QScriptValue add = engine.globalObject().property("add ");

Я завожу глобальный объект, который после будет обращаться в скрипт по имени функции

QDebug () <<add.call (QScriptValue (), QScriptValueList () <<stroka) toVariant ().

Вот я вызываю функцию и передаю строку в скрипт. Ниже простой скрипт:

function add(stroka) {
arr = Array;

for (i=0; typeof(stroka[i])!=="undefined"; i=i+1){
arr[i]=stroka[i];
}
return arr;
}

Дело в том, что выводит следующее:

QVariant(QVariantMap, QMap(("0", QVariant(QString, "1") ) ( "1" , QVariant(QString, "2") ) ( "2" , QVariant(QString, "3") ) ( "3" , QVariant(QString, "4") ) ( "4" , QVariant(QString, "5") ) ( "5" , QVariant(QString, "1") ) ( "6" , QVariant(QString, "2") ) ( "7" , QVariant(QString, "3") ) ( "isArray" , QVariant(QVariantMap, QMap(("length", QVariant(double, 1) ) ( "name" , QVariant(QString, "isArray") ) ) ) ) ( "length" , QVariant(double, 1) ) ( "name" , QVariant(QString, "Array") ) ( "prototype" , QVariant(QVariantList, () ) ) ) )

Я дописывал в строку toMap (). -
QDebug () <<add.call (QScriptValue (), QScriptValueList () <<stroka) toVariant () toMap ()..;
и начало выводить следующее:

QMap(("0", QVariant(QString, "1") ) ( "1" , QVariant(QString, "2") ) ( "2" , QVariant(QString, "3") ) ( "3" , QVariant(QString, "4") ) ( "4" , QVariant(QString, "5") ) ( "5" , QVariant(QString, "1") ) ( "6" , QVariant(QString, "2") ) ( "7" , QVariant(QString, "3") ) ( "isArray" , QVariant(QVariantMap, QMap(("length", QVariant(double, 1) ) ( "name" , QVariant(QString, "isArray") ) ) ) ) ( "length" , QVariant(double, 1) ) ( "name" , QVariant(QString, "Array") ) ( "prototype" , QVariant(QVariantList, () ) ) )

Я посмотрел еще упрощение и дописал значения (). -
QDebug () <<add.call (QScriptValue (), QScriptValueList () <<stroka) toVariant ().toMap ().values();
И выводит следующее:

(QVariant(QString, "1") , QVariant(QString, "2") , QVariant(QString, "3") , QVariant(QString, "4") , QVariant(QString, "5") , QVariant(QString, "1") , QVariant(QString, "2") , QVariant(QString, "3") , QVariant(QVariantMap, QMap(("length", QVariant(double, 1) ) ( "name" , QVariant(QString, "isArray") ) ) ) , QVariant(double, 1) , QVariant(QString, "Array") , QVariant(QVariantList, () ) )

Вот тут я и застрял, так как дальнейшее преобразование у меня просто не получается, да и в теле функции оно будет лишнее. Нужна помощь в переписании самого скрипта и получении из него только значений в массив, а не бесполезной кучи, которую надо преобразовывать.

Последний раз редактировалось raks123; 02.10.2011 в 20:16.
raks123 вне форума Ответить с цитированием
Старый 03.10.2011, 18:24   #2
raks123
 
Регистрация: 02.10.2011
Сообщений: 3
По умолчанию

Нашел решение))) скрипт остался таким же, а основную функцию пришлось подправить:

QScriptValue variant;

engine.evaluate(contents);

QScriptValue add = engine.globalObject().property("add ");

variant = add.call(QScriptValue(), QScriptValueList() << stroka );

QScriptValueIterator it(variant);

while(it.hasNext()){
it.next();
if (!(it.flags() && QScriptValue::SkipInEnumeration))
{
qDebug()<<it.name()<<": " <<it.value().toInteger();
}
}

Наконец то начало выводить следующее:
"0" : 1
"1" : 2
"2" : 3
"3" : 4
"4" : 5
"5" : 1
"6" : 2
"7" : 3
raks123 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод результата работы скрипта в модальном окне snikers987 JavaScript, Ajax 2 06.06.2011 23:27
Вывод текста из PHP скрипта Dominatorsha PHP 1 13.12.2010 12:06
Тест скорости инета и вывод скрипта bionicle12 PHP 6 06.09.2010 10:28
Динамический вывод результата выполнения php скрипта. amdbodia JavaScript, Ajax 26 21.01.2010 23:23
Вывод значений из скрипта на страничку Salomon HTML и CSS 3 17.03.2009 15:42