Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 Проблема с strtran  [new]
glamis
Member

Откуда:
Сообщений: 642
Потребовалось дополнительно обработать строку. Хотел применить strtran. Примерно так:

s1='for i=1 to ThisFormset.repalias'
s2='Thisformset.repalias'

?strt(s1, s2, '_v1', -1, -1, 3)

Но выяснилось, что 3-й параметр использовался только до 7-й версии.

Может кто знает как обработать?
2 авг 21, 16:28    [22354123]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с strtran  [new]
Sergey Sizov
Member

Откуда:
Сообщений: 1595
glamis,
вспомнить/открыть для себя наличие функций STRToFile() и STRTran(), у которых, однако, первые четыре символа таки совпадают.
Исходя из этого таки явно указать фоксу нужную функцию, а не надеяться на отсутствующий у него искусственный интеллект.
2 авг 21, 17:44    [22354177]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с strtran  [new]
glamis
Member

Откуда:
Сообщений: 642
Sergey Sizov,
Оценил Вашу язвительность.

Достойная способность вместо ответа сказать банальность.

Просто, чтобы сказать.

Сообщение было отредактировано: 3 авг 21, 10:54
3 авг 21, 11:02    [22354464]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с strtran  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7919
Он имел в виду, что в версии VFP6 была введена функция strToFile(). Как следствие, первые 4 символа "strt" с этого момента стали соответствовать двум функциям: strTran() и strToFile()

Поэтому, чтобы не было неоднозначности идентификации функции не следует сокращать их имя до 4 символов, а писать имя функции полностью.

У функции StrTran() количество параметров не менялось со времен fpd2.x. В версии VFP9 по прежнему 6 параметров
У функции StrToFile() всего 3 параметра. Возможно, именно с ней и произошла путаница
3 авг 21, 12:42    [22354538]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с strtran  [new]
glamis
Member

Откуда:
Сообщений: 642
ВладимирМ,
о чем вы друзья? Прочитайте 1ю строку, там все написано о чем речь. И при работе с редактором он однозначно трактует strt как strtrans. Причем здесь strtofile?
Вопрос про преобразование строки.

Как оказалось, параметр чувствительности strtran работал до 7й версии. Есть у кого варианты решения? Только не надо программных решений-я это сделал уже. Только не красиво. Не люблю лишний код.
3 авг 21, 22:12    [22354928]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с strtran  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7919
1. Фразу "3-й параметр" я понял как параметр с порядковым номером 3. Кто же знал, что речь идет о параметре с порядковым номером 6 и его значении "3"

2. Этот параметр был введен в версии VFP7. Т.е. использовался начиная с версии VFP7 и ПОСЛЕ, но никак не "до".

3. Вы не указали версию, о которой идет речь. По умолчанию, это подразумевает последнюю версию. Т.е. VFP9. Это значит, что параметр есть.

Все вместе, вызывает недоумение. О чем вообще вопрос-то был?


Если речь идет о замене подстроки без учета регистра, то первое, что приходит в голову, это сначала перевести весь текст в один регистр через UPPER() или LOWER(), а потом делать замену

s1=UPPER('for i=1 to ThisFormset.repalias')
s2=UPPER('Thisformset.repalias')

?strt(s1, s2, UPPER('_v1'), -1, -1, 3)
4 авг 21, 01:32    [22354969]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с strtran  [new]
Redrik
Member

Откуда:
Сообщений: 825
"ничиго нипанимаю" (с)
в чем "проблема"?

?strt(s1, s2, '_v1', -1, -1, 3)
выдает "Too many arguments"

в то время как

?strtRAN(s1, s2, '_v1', -1, -1, 3)
прекрасно работает! -> for i=1 to _v1
4 авг 21, 07:14    [22354986]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с strtran  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7919
Автор не смог корректно описать проблему. Попробую за него

Функция StrTran() по умолчанию различает регистр букв. Т.е. для нее большие и маленькие буквы - это разные буквы

?StrTran("Aa", "a", "b")  && вернет "Ab"


В версии VFP7 в эту функцию был добавлен еще один параметр (6 по счету), при помощи которого можно явным образом указать - учитывать регистр букв или нет. Например

?StrTran("Aa", "a", "b", -1, -1, 3)  && вернет "bb"


Вопрос в том, как при использовании функции StrTran() в версии младше VFP7 сделать эту функцию регистро-независимой? Т.е. чтобы замена выполнялась вне зависимости от того, большая буква или маленькая.

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

?StrTran(LOWER("Aa"), LOWER("a"), LOWER("b"))  && вернет "bb"
4 авг 21, 13:48    [22355161]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с strtran  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 3279
ВладимирМ



Собственно, ответ очевиден.


?StrTran(LOWER("Aa"), LOWER("a"), LOWER("b"))  && вернет "bb"

что веренет VFP7+ ?StrTran("xAaY", "a", "b", -1, -1, 3)?

что веренет VFP7+ ?StrTran("xAzaZY", "aZ", "bC", -1, -1, 3)?

.....
stax
4 авг 21, 16:06    [22355266]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с strtran  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7919
Stax

В исходном вопросе речь идет о поиске фрагмента строки "ThisFormset.repalias", когда одну из букв не в том регистре указали.

А, в общем случае, конечно, просто приведение регистра к общему значению не всегда будет работать корректно.
4 авг 21, 19:36    [22355345]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с strtran  [new]
glamis
Member

Откуда:
Сообщений: 642
ВладимирМ,
просто обработать не получится.
Вообще странно:
Если пишешь strt и указываешь 3-5 параметров все работает как надо, если пишешь strt и указываешь 6 параметров - ошибка.
Но если strtran - все работает как надо.
5 авг 21, 10:30    [22355451]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с strtran  [new]
glamis
Member

Откуда:
Сообщений: 642
Тема закрыта
5 авг 21, 10:41    [22355460]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить