Перейти к содержимому

Фотография

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


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 7

#1 gira13

gira13

    Активный участник

  • Members
  • PipPip
  • 80 сообщений
  • Город:Киев

Отправлено 12 сентября 2014 - 14:49

У меня вообще-то есть число, хотя я его храню как строку

мне необходимо разбить на массив, чтобы к каждому символу(цифре) можно было обратиться,т.к. мне надо найти некое выражение, используя все эти цифры

Можно это какой-то функцией сделать или только используя копирование подстроки

aqString.SubString...?


  • 0

#2 aksas

aksas

    Активный участник

  • Members
  • PipPip
  • 130 сообщений
  • Город:Харьков

Отправлено 12 сентября 2014 - 15:16

эм, если вы используюте javascript, то точно можете обращаться к строке как к массиву

var s = 'abc';
s[0] == 'a'; //true

for(var i=0; i<s.length; i++){
        log(s[i]);
}

  • 1

#3 aksas

aksas

    Активный участник

  • Members
  • PipPip
  • 130 сообщений
  • Город:Харьков

Отправлено 12 сентября 2014 - 15:28

через aqString слегка многословно, но тожн работает

for (var i = 0; i < aqString.GetLength(s); i++){
    Log.Message(aqString.GetChar(s, i));
}

  • 1

#4 gira13

gira13

    Активный участник

  • Members
  • PipPip
  • 80 сообщений
  • Город:Киев

Отправлено 15 сентября 2014 - 13:14

 

эм, если вы используюте javascript, то точно можете обращаться к строке как к массиву

var s = 'abc';
s[0] == 'a'; //true

for(var i=0; i<s.length; i++){
        log(s[i]);
}

у меня и возник вопрос,т.к. отображается  dn string со значением 333331122, а dn[1] underfined

Просто мне надо описать формулу и использую сейчас SubString - получается длинная строка:

var sum=-aqConvert.StrToInt(aqString.SubString(dn,0,1))+5*(aqConvert.StrToInt(aqString.SubString(dn,1,1))+aqConvert.StrToInt(aqString.SubString(dn,7,1)))+7*(aqConvert.StrToInt(aqString.SubString(dn,2,1))+aqConvert.StrToInt(aqString.SubString(dn,8,1)))+9*aqConvert.StrToInt(aqString.SubString(dn,3,1))+4*aqConvert.StrToInt(aqString.SubString(dn,4,1))+6*aqConvert.StrToInt(aqString.SubString(dn,5,1))+10*aqConvert.StrToInt(aqString.SubString(dn,6,1)); 

думала как-то уменьшить

Если использовать GetChar, будет конечно меньше, но не намного


  • 0

#5 modbear

modbear

    Специалист

  • Members
  • PipPipPipPipPip
  • 548 сообщений

Отправлено 15 сентября 2014 - 15:43

Откуда берете строку - из приложения, БД, ...? Может, там строковой тип отличается от JScript-строк? Какие значения у выражений:

typeof dn      // должно быть string
VarType(dn)    // должно быть 8

Чтобы укоротить строку, можно попробовать вместо aqConvert.StrToInt(...) использовать Number(...). Или даже унарный плюс - см. пример ниже (если потом сможете в таком коде разобраться :smile:). А чтобы было читабельнее, можно разбить строку:

var sum =
  - aqString.GetChar(dn, 0)
  + 5 * (
         +aqString.GetChar(dn, 1)
         +
         +aqString.GetChar(dn, 7)
    )
  + 7 * (
         +aqString.GetChar(dn, 2)
         +
         +aqString.GetChar(dn, 8)
    )
  + 9 * +aqString.GetChar(dn, 3)
  + 4 * +aqString.GetChar(dn, 4)
  + 6 * +aqString.GetChar(dn, 5)
  + 10 * +aqString.GetChar(dn, 6);

  • 0

#6 gira13

gira13

    Активный участник

  • Members
  • PipPip
  • 80 сообщений
  • Город:Киев

Отправлено 16 сентября 2014 - 07:20

 

Откуда берете строку - из приложения, БД, ...? Может, там строковой тип отличается от JScript-строк? Какие значения у выражений:

typeof dn      // должно быть string
VarType(dn)    // должно быть 8

вот откуда:

var k=aqConvert.StrToInt(aqString.SubString(Project.Variables.idn0,5,4))+1;
var dn=aqString.SubString(Project.Variables.idn0,0,5)+k;

где Project.Variables.idn0 переменная типа  string, на сколько я понимаю и dn типа string

 

typeof dn показывает string

VarType(dn) показывает 8


  • 0

#7 modbear

modbear

    Специалист

  • Members
  • PipPipPipPipPip
  • 548 сообщений

Отправлено 16 сентября 2014 - 11:43

Обращение по индексу dn[0], похоже, работает только в JavaScript в браузерах.

В JScript, который в TestComplete, надо так: dn.charAt(0).

Или можете разбить строку на массив символов и работать с массивом:

var chars = dn.split("");
Log.Message(chars[0]);

  • 0

#8 aksas

aksas

    Активный участник

  • Members
  • PipPip
  • 130 сообщений
  • Город:Харьков

Отправлено 16 сентября 2014 - 13:30

Обращение по индексу dn[0], похоже, работает только в JavaScript в браузерах.

ух ты, и правда :)

 

думала как-то уменьшить

напишите вспомогательную функцию. Както так

var c2n = function(index){
   return aqConvert.StrToInt(aqString.GetChar(dn, index));
}
var sum = -c2n(0)+5*(c2b(1)+c2n(7))+7*(c2n(2)+c2n(8))+9*c2n(3)+4*c2n(4)+6*c2n(5)+10*c2n(6);

  • 1


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных