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

Фотография

Сокращение значения строковой переменной


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

#1 Hunter_ua

Hunter_ua

    Новый участник

  • Members
  • Pip
  • 47 сообщений
  • ФИО:Андрей

Отправлено 12 января 2007 - 09:40

В книжке искал, что-то не нашел, хотя вроде бы где-то это встречал.
Например у меня есть переменная: string sPageSize, которая после функции GetText () имеет значение "Cropped Page Size:519.01 Points x 657.00 Points", а мне для сравнения нужно значение "519.0 x 657.0 pt". Какой код для этого должен быть? Помогите пожалуйста!
  • 0

#2 Genka

Genka

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

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


Отправлено 12 января 2007 - 09:53

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

ну или как вариант:

[ ] string s = "Cropped Page Size:519.01 Points x 657.00 Points"
	[ ] 
	[ ] Print("{Left (GetField(s, ":", 2), 5)} x {Left(GetField(s, " x ", 2), 5)} pt")

  • 0

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

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

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


#3 Hunter_ua

Hunter_ua

    Новый участник

  • Members
  • Pip
  • 47 сообщений
  • ФИО:Андрей

Отправлено 12 января 2007 - 10:05

Щас попробую, но вариант хороший, спасибо :)
  • 0

#4 Genka

Genka

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

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


Отправлено 12 января 2007 - 10:09

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

если же надо, чтобы нормально обрабатывались строки типа
"Cropped Page Size:519.01 Points x 657.00 Points"
"Cropped Page Size:1519.01 Points x 2657.00 Points"
"Cropped Page Size:19.01 Points x 57.00 Points"

то надо писать типа такого:
Print("{SubStr (GetField(GetField(s, ":", 2), " ", 1), 1, Len(GetField(GetField(s, ":", 2), " ", 1))-1)} x {SubStr(GetField(GetField(s, " x ", 2), " ", 1), 1, Len(GetField(GetField(s, " x ", 2), " ", 1))-1)} pt")

во ужас, правда? =)
а вот если после точки там не всегда 2 знака, а может быть один, то будет еще хуже :help:
  • 0

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

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

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


#5 Hunter_ua

Hunter_ua

    Новый участник

  • Members
  • Pip
  • 47 сообщений
  • ФИО:Андрей

Отправлено 12 января 2007 - 10:20

:help: весело!
  • 0

#6 Hunter_ua

Hunter_ua

    Новый участник

  • Members
  • Pip
  • 47 сообщений
  • ФИО:Андрей

Отправлено 12 января 2007 - 10:24

Млин, задача еще усложняется тем что нужно сравнивать со значением "519,0 x 657,0 pt" где стоят не точки а запятые... Наверно нужно создавать отдельно 4 перменных в которых буду вырезаться числа s1 = 519, s2 = 0, s3 = 657, s4 = 0. Получится?
  • 0

#7 Genka

Genka

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

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


Отправлено 12 января 2007 - 10:30

ну нате вариант, который работает с любым кол-вом знакорв в числах (как до, так и после десятичного разделителя) и при этом заменяет точки на запятые

Print("{GetField(GetField(GetField(s, ":", 2), " ", 1), ".", 1)},{SubStr(GetField(GetField(GetField(s, ":", 2), " ", 1), ".", 2), 1, 1)} x {GetField (GetField(GetField(s, " x ", 2), " ", 1), ".", 1)},{SubStr(GetField (GetField(GetField(s, " x ", 2), " ", 1), ".", 2), 1, 1)} pt")

:help:
  • 0

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

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

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


#8 Hunter_ua

Hunter_ua

    Новый участник

  • Members
  • Pip
  • 47 сообщений
  • ФИО:Андрей

Отправлено 12 января 2007 - 10:44

Гы :crazy:
  • 0

#9 KaNoN

KaNoN

    АЦЦКИЙ СОТОНА

  • Members
  • PipPipPipPipPipPip
  • 1 260 сообщений
  • ФИО:Колесник Николай
  • Город:Днепропетровск > Киев > Лондон

Отправлено 12 января 2007 - 10:47

Если строка имеет фиксированный формат
"Cropped Page Size:[nnnn] Points x [nnnn] Points"
и при этом просто нужно убрать пару-тройку слов, то это можно сделать заменой подстрок "Cropped Page Size:" и "Points" на пустые строки. То есть в итоге имеем:

Print( Trim( StrTran( StrTran( s , "Points" , "" ) , "Cropped Page Size:" , "" ) ) + " pt" )

Такая конструкция все-таки попроще
  • 0

#10 Genka

Genka

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

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


Отправлено 12 января 2007 - 10:50

я так понял из вопроса, что надо еще и из числа с двумя знаками после запятой делать число с одним знаком
  • 0

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

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

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


#11 Hunter_ua

Hunter_ua

    Новый участник

  • Members
  • Pip
  • 47 сообщений
  • ФИО:Андрей

Отправлено 12 января 2007 - 10:54

Да, числа должны быть с одним знаком после запятой.
  • 0

#12 OlgaV

OlgaV

    Новый участник

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


Отправлено 12 января 2007 - 11:28

А почему, получив числа, нельзя воспользвоваться Val и хранить _численное_ значение для сравнения? тогда проблем с количеством знаков после запятой не возникнет... И видом самой запятой тоже.
  • 0

#13 KaNoN

KaNoN

    АЦЦКИЙ СОТОНА

  • Members
  • PipPipPipPipPipPip
  • 1 260 сообщений
  • ФИО:Колесник Николай
  • Город:Днепропетровск > Киев > Лондон

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

Хорошая мысль. Ведь исходную строку можно расчистить так, что там останутся только числа. Что-то типа:

[code=auto:0]
Trim( StrTran( StrTran( StrTran( s , "Points" , "" ) , "Cropped Page Size:" , "" ) , " x" , "" ) )
[code=auto:0]

Или вообще воспользоваться 2-мя вызовами GetField, чтобы вытянуть оба числа. Как минимум такая реализация читается легче. Ну уж по-крайней мере это будет куда понятнее тех "уродцев", что мы тут накидали
  • 0

#14 Hunter_ua

Hunter_ua

    Новый участник

  • Members
  • Pip
  • 47 сообщений
  • ФИО:Андрей

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

Вобщем я сделал так:

Print ("{SubStr(sPDFPPageSizePoints, 19, 3)},{SubStr(sPDFPPageSizePoints, 23, 1)} x {SubStr(sPDFPPageSizePoints, 35, 3)},{SubStr(sPDFPPageSizePoints, 39, 1)} pt")

Всем большое спасибо за помощь :crazy:
  • 0

#15 KaNoN

KaNoN

    АЦЦКИЙ СОТОНА

  • Members
  • PipPipPipPipPipPip
  • 1 260 сообщений
  • ФИО:Колесник Николай
  • Город:Днепропетровск > Киев > Лондон

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

Рисковано, хотя бы Trim-ы в некоторые места зарядить бы. Ну да ладно. В некоторых случаях принцип "Работает - не трогай" вполне оправдан
  • 0

#16 Hunter_ua

Hunter_ua

    Новый участник

  • Members
  • Pip
  • 47 сообщений
  • ФИО:Андрей

Отправлено 12 января 2007 - 17:50

Trim-ы я все-таки поставил на всякий случай :crazy:
  • 0

#17 vass

vass

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

  • Members
  • PipPipPipPip
  • 298 сообщений
  • ФИО:Василий

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

это будет работать до тех пор пока не начнется сканирование маленьких изображений типа "Cropped Page Size:19.01 Points x 57.00 Points" :rtfm:
или наоборот сверхбольших (но это ИМХО маловероятное событие, тем более, что там 2 ноля в конце чисел. Хотя может если А2 попадется :crazy: )
  • 0


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

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