crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Массив из скрипта
Raks123
  опции профиля:
сообщение 2.10.2011, 16:05
Сообщение #1


Студент
*

Группа: Новичок
Сообщений: 16
Регистрация: 2.10.2011
Пользователь №: 2920

Спасибо сказали: 0 раз(а)




Репутация:   0  


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

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();
и начало выводить следующее:

QVariant(QVariantList, (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, () ) ) )

Я посмотрел еще упрощение и дописал .values() -
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
  опции профиля:
сообщение 3.10.2011, 17:40
Сообщение #2


Студент
*

Группа: Новичок
Сообщений: 16
Регистрация: 2.10.2011
Пользователь №: 2920

Спасибо сказали: 0 раз(а)




Репутация:   0  


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

    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
Причина редактирования: используй кнопку КОД
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.3.2024, 15:40