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

Фотография

Определение типа элемента массива


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

#1 ArtemRudenko

ArtemRudenko

    Постоянный участник

  • Members
  • PipPipPip
  • 248 сообщений
  • ФИО:Руденко Артем Михайлович
  • Город:Минск


Отправлено 27 апреля 2007 - 07:37

ТС 5.0
С#Script
.net
День добрый всем, возникла такая проблема:
Есть массив, который содержит различные эллементы: строки,числа,даты. Задача определить к какому конкретному типу относится элемент массива, дабы далее его преобразовать соответственно его типу(конечно можно по определенным индексам осуществлять преобразование, но хотелось написать универсальную функцию по преобразованию, которая анализировала бы содержимое любого массива).
  • 0
И всё-таки она вертится...

#2 Genka

Genka

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 328 сообщений
  • ФИО:Геннадий Алпаев
  • Город:Украина, Днепр


Отправлено 27 апреля 2007 - 07:57

function TypesTest()
{
  var a = new Array();
  a[1] = "string";
  a[2] = 23.5;
  a[3] = true;
  
  var i;
  for(i in a)
  {
    Log.Message(typeof(a[i]));
  }
}

Выведет в результате
string
number
boolean

типа ДАТА нету, так что если вам надо его как-то отличать от строки, то придется писать дополнительную функцию, используя регэкспы

если что - пишите, поможем :)
  • 0

TestComplete для начинающих (видеозаписи курса)

Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)

Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest


#3 ArtemRudenko

ArtemRudenko

    Постоянный участник

  • Members
  • PipPipPip
  • 248 сообщений
  • ФИО:Руденко Артем Михайлович
  • Город:Минск


Отправлено 27 апреля 2007 - 08:02

Спасибо, понятно
Только вот с числами у меня что-то странное, в том смысле что typeof для них выдает object, а не number.
  • 0
И всё-таки она вертится...

#4 ArtemRudenko

ArtemRudenko

    Постоянный участник

  • Members
  • PipPipPip
  • 248 сообщений
  • ФИО:Руденко Артем Михайлович
  • Город:Минск


Отправлено 27 апреля 2007 - 08:19

ПО поводу использования RegExp - он работает только со строками или с объектами тоже, просто значение массива скаже 01/03/2007 и это не является строкой (распознается как object) при попытке вызвать метод для object.toString получаю undefined.
Может я не тот метод вызываю.
От undefined я избавился и с преобразованием чисел всё нормально но как перегнать 01/03/2007 в строку хотя бы
  • 0
И всё-таки она вертится...

#5 Genka

Genka

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 328 сообщений
  • ФИО:Геннадий Алпаев
  • Город:Украина, Днепр


Отправлено 27 апреля 2007 - 08:47

Только вот с числами у меня что-то странное, в том смысле что typeof для них выдает object, а не number


в моем примере? не верю =)

если же в ваших скриптах, то покажите, как заполняется массив, откуда берутся данные
есть подозрение, что вы берете данные из контролов и делаете это не совсем правильно

например, если бы берете свойство Text поля, и это значение заносите в массив, то попробуйте использовать Text.OleValue

RegExp работает только со строками
  • 0

TestComplete для начинающих (видеозаписи курса)

Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)

Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest


#6 ArtemRudenko

ArtemRudenko

    Постоянный участник

  • Members
  • PipPipPip
  • 248 сообщений
  • ФИО:Руденко Артем Михайлович
  • Город:Минск


Отправлено 27 апреля 2007 - 08:59

Обрисовываю ситуацию как есть.
В приложении есть Infragistic.UltraGrid, в котором храняться значения различного плана, а именно числа, даты и строки. На форме есть кнопка CopyAll, которая копирует значения из таблицы в буфер обмена. Затем то, что мы имеем в буфере, сохраняется в Excel. После чего в соответствии с тесткейсами мы с использованием DDTExcelDriver заполняем массив эллементов строки из Excel, который необходимо сравнить со значениями из соответствующей строки grid. Проблема состоит в том, что из grid все значения изымаются как string, причем все числа округлены, а то, что копировалось в буфер обмена и соответственно затем сохранялось в файл, является числами и датами причем не округлеными и в полном формате.

Как вариант есть возможность обратного преобразования содержимого строки в численные значения но вот что делать с датой остается вопросом потому как преобразует она как то весьма своеобразно.
  • 0
И всё-таки она вертится...

#7 Genka

Genka

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 328 сообщений
  • ФИО:Геннадий Алпаев
  • Город:Украина, Днепр


Отправлено 27 апреля 2007 - 09:15

Честно говоря, не получилось у меня воспроизвести эту проблему с датой.

Я использовал такой сценарий:
1) в Excel-файле вписал в ячейку значение 12/12/2007
2) проверил тип поля, Excel говорит, что тип поля Date
3) с помощью DDTExcelDriver считал знчение этого поля и проверил его тип. TestComplete говорит, что string

соответственно, у меня все работает
  • 0

TestComplete для начинающих (видеозаписи курса)

Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)

Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest


#8 ArtemRudenko

ArtemRudenko

    Постоянный участник

  • Members
  • PipPipPip
  • 248 сообщений
  • ФИО:Руденко Артем Михайлович
  • Город:Минск


Отправлено 27 апреля 2007 - 09:19

Посмотрел у себя
У меня там где хранится дата тип ячейки стоит custom.
  • 0
И всё-таки она вертится...

#9 Genka

Genka

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 328 сообщений
  • ФИО:Геннадий Алпаев
  • Город:Украина, Днепр


Отправлено 27 апреля 2007 - 09:30

Это категория Custom, а в списке Type (справа от категории) что указано?
  • 0

TestComplete для начинающих (видеозаписи курса)

Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)

Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest


#10 ArtemRudenko

ArtemRudenko

    Постоянный участник

  • Members
  • PipPipPip
  • 248 сообщений
  • ФИО:Руденко Артем Михайлович
  • Город:Минск


Отправлено 27 апреля 2007 - 09:33

m/d/yyyy h:mm при том что в grid Отображается как yyyy-mm-dd
А не подскажите txt = Sys["Clipboard"]();в чем ошибка для C#Script
  • 0
И всё-таки она вертится...

#11 ArtemRudenko

ArtemRudenko

    Постоянный участник

  • Members
  • PipPipPip
  • 248 сообщений
  • ФИО:Руденко Артем Михайлович
  • Город:Минск


Отправлено 27 апреля 2007 - 09:46

Думал думал, вот пришел к чему, что ведь задачей является сравнение значений как таковых, а не конкретно проверка того, что имеется в экселе. Посему можно обрабатывать clipboard, разрезать его на элементы посредством split, а потом сравнивать полученное, вот правда алгоритм будет отчасти немалый, но зато всё идет как строка, и всё можно преобразовать почти к любому виду.
  • 0
И всё-таки она вертится...

#12 Genka

Genka

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 328 сообщений
  • ФИО:Геннадий Алпаев
  • Город:Украина, Днепр


Отправлено 27 апреля 2007 - 09:48

m/d/yyyy h:mm


сделал так же... проверил... все ОК, строка как строка

А не подскажите txt = Sys["Clipboard"]();в чем ошибка для C#Script

txt = Sys["Clipboard"];
  • 0

TestComplete для начинающих (видеозаписи курса)

Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)

Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest


#13 ArtemRudenko

ArtemRudenko

    Постоянный участник

  • Members
  • PipPipPip
  • 248 сообщений
  • ФИО:Руденко Артем Михайлович
  • Город:Минск


Отправлено 27 апреля 2007 - 09:51

Ну раз у вас всё отрабатывает значит звезды сегодня для меня не в том созвездии)))) и такое бывает)))
В любом случае большое спасибо за помощь. Буду пробовать найти решение, видать где-то закралась какая-нибудь мелкая пакость.
  • 0
И всё-таки она вертится...

#14 AlexP

AlexP

    Опытный участник

  • Members
  • PipPipPipPip
  • 406 сообщений
  • Город:Санкт-Петербург

Отправлено 27 апреля 2007 - 11:45

Есть ещё один вариант, возможно более сложный, но всё...

Использовать .Net bridge:
1) С помощью OleDB запихать все значения из excel'я в DataTable
2) Перевести значения в string и сравнивать со строками из грида
или
2) Я никогда не работал с Infragistic.UltraGrid и не знаю, каким образом в этот контрол сетятся значения, но если вдруг с помощью DataTable, то тогда проще сравнить 2-а объекта DataTable без преобразования типов...
  • 0

#15 ArtemRudenko

ArtemRudenko

    Постоянный участник

  • Members
  • PipPipPip
  • 248 сообщений
  • ФИО:Руденко Артем Михайлович
  • Город:Минск


Отправлено 27 апреля 2007 - 11:49

Спасибо за предложение, попробую изучить такие возможности.

А что касается того, что у меня постоянно возвращала Object, так то у меня было помутнение рассудка ))) я вместо typeof() писал typeof[] и в этом была вся загвоздка(сам себя перемудрил).

Теперь вот вошкаюсь чтобы всё таки найти вариант преобразования значения считанного из таблицы в дату.
  • 0
И всё-таки она вертится...

#16 ArtemRudenko

ArtemRudenko

    Постоянный участник

  • Members
  • PipPipPip
  • 248 сообщений
  • ФИО:Руденко Артем Михайлович
  • Город:Минск


Отправлено 27 апреля 2007 - 12:42

Снова всем добрый день :focus:
Покалыпался я покалыпался и вот к чему пришёл: :focus:
1) Оператор typeof() вроде как по спецификациии: "The typeof operator returns type information as a string. There are six possible values that typeof returns: "number," "string," "boolean," "object," "function," and "undefined." " - однако для ячейки, содержащей дату он возвращает "date".
2) Метод parse() объекта Date. Cинтаксис Date.parse(dateVal)
The parse method returns an integer value representing the number of milliseconds between midnight, January 1, 1970 and the date supplied in dateVal.
Причем, судя по спецификации dateVal это строка, но и это но весьма интересно в том, что этот метод одинаково хорошо отрабатывает в двух следующих случаях:
dateGridVal = Date.parse("7-17-2006");
dateCellVal = Date.parse(7/17/2006);
причем что очень радует ))) dateGridVal == dateCellVal
Те не обязательно на вход должна поступать строка - и благодаря этому сравнить две даты становиться просто - мы сравниваем не две конкретные даты, а два значения миллисекунд прошедших с midnight, January 1, 1970.

Надеюсь что кому-нибудь эта информация поможет.
За сим всем спасибо за помощь.
  • 0
И всё-таки она вертится...

#17 Genka

Genka

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 328 сообщений
  • ФИО:Геннадий Алпаев
  • Город:Украина, Днепр


Отправлено 27 апреля 2007 - 13:13

однако для ячейки, содержащей дату он возвращает "date".


нашел вот тут

В Microsoft JScript операция typeof может возвращать еще два значения: "date" (тип VT_DATE стандарта COM) и "unknown" (COM-интерфейсы ActiveX).
  • 0

TestComplete для начинающих (видеозаписи курса)

Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)

Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest


#18 ArtemRudenko

ArtemRudenko

    Постоянный участник

  • Members
  • PipPipPip
  • 248 сообщений
  • ФИО:Руденко Артем Михайлович
  • Город:Минск


Отправлено 27 апреля 2007 - 13:19

Ну вот)) :focus:
И какой источник информации после этого выбрать))) чтобы всегда смочь найти то, что надо, если даже на родном сайте такого не могли написать))) http://msdn.microsof...bbfe2330aa9.asp

Вот и что делать начинающим людям как мне) хотя как говориться жить захочешь не так закрутишься я тут ёщё как вариант подумал что можно попробовать
if (obj instanceof Date)
{
}
поидее тоже отработает.
  • 0
И всё-таки она вертится...

#19 Genka

Genka

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 328 сообщений
  • ФИО:Геннадий Алпаев
  • Город:Украина, Днепр


Отправлено 27 апреля 2007 - 13:36

вообще, пока мы тут тему эту тянули, я написал функцию, которая возвращает "date" даже для обычных строк в определенном формате

ну выложу, что ли, не пропадать же добру :focus:

function _typeof(value)
{
  switch(typeof(value))
  {  
    case "string":
      return (value.match(/\d{1,2}[\/.-]\d{1,2}[\/.-]\d{2,4}/) != null) ? "date" : "string";
      break;
    default:
      return typeof(value);
  }  
}

возвращает "date" для строк следующих форматов (# - это любая цифра):
##/##/##, #/##/##, ##/#/##, #/#/##
##/##/####, #/##/####, ##/#/####, #/#/####

и то же самое, но если в качестве разделителя выступает точка или дефис, а не слеш
##.#.##, #.##.##, ##.#.##, #.#.##
##.##.####, #.##.####, ##.#.####, #.#.####

##-#-##, #-##-##, ##-#-##, #-#-##
##-##-####, #-##-####, ##-#-####, #-#-####
наверное можно и улучшить этот регексп, но я их только вчера начал изучать, так что уж простите =)
  • 0

TestComplete для начинающих (видеозаписи курса)

Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)

Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest


#20 AlexP

AlexP

    Опытный участник

  • Members
  • PipPipPipPip
  • 406 сообщений
  • Город:Санкт-Петербург

Отправлено 27 апреля 2007 - 13:37

Теперь вот вошкаюсь чтобы всё таки найти вариант преобразования значения считанного из таблицы в дату.

Просмотр сообщения


Попробуй:

//JScript
dotNET.System.Convert.ToDateTime_13(string)

  • 0


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

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