:: Visual Foxpro, Foxpro for DOS
Re: Заменить нули на пробелы в выходной форме FPD 2.6
of63

Сообщений: 25244
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Слезать ему надо, Симплу, с ФПД на винду, время теряет, а лет осталось не бесконечное количество, каждый считаный. Не тупи, и на ВФП9 слезай, на лицензии за..й
Ratings: 0 negative/0 positive
Re: Заменить нули на пробелы в выходной форме FPD 2.6
akvvohinc

Сообщений: 4212
Откуда: Москва
Дата регистрации: 11.11.2008
of63
ТС хочет изобразить на длине 11 символов сумму с копейками

Как интересно!
А говорили, что экстрасенсов здесь нет.
Сначала Игорь увидел ограничение в 11 символов, а теперь вот и у Олега "сумма с копейками" нарисовалась из ниоткуда (заодно подтвердил, что он тоже где-то видит эти 11).
И лишь я оказался без суперспособностей - обидно.

of63
Не тупи, и на ВФП9 слезай, на лицензии за..й

Полезность VFP для этой задачи только в том, что функции группы TRIM() умеют обрезать не только пробелы, но и любые символы, в том числе нули. Соответственно, результат достигается чуть проще:
n = TRIM(STR(fld,30,4),1,'0')
RETURN IIF(LEN(n)<28,PADR(n,28,'0'),n)

А при необходимости можно без больших временнЫх затрат обойтись и без UDF:
LEFT(STR(myfield,30,4),30-2)+TRIM(RIGHT(STR(myfield,30,4),2),1,'0')



Исправлено 4 раз(а). Последнее : akvvohinc, 30.03.18 04:04
Ratings: 0 negative/0 positive
Re: Заменить нули на пробелы в выходной форме FPD 2.6
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006


Мда...

А я-то думал, что вопрос простой.

Myfield - это не ценовой реквизит, а количественный - содержит количество в физических единицах измерения.

При печати отчета Myfield должен занимать 11 символов - иначе отчет будет выглядеть "как бык поссал".
Ratings: 0 negative/0 positive
Re: Заменить нули на пробелы в выходной форме FPD 2.6
akvvohinc

Сообщений: 4212
Откуда: Москва
Дата регистрации: 11.11.2008
Simple777
При печати отчета Myfield должен занимать 11 символов - иначе отчет будет выглядеть "как бык поссал"

Тогда, прежде чем решать (если решать) задачу о размещении в 11 символах чисел большего размера, надо бы получить у автора ТЗ, ибо сделать это можно не одним способом, но во всех случаях потерь не избежать.
Резать к чертовой матери! Copyright © 1982
Ratings: 0 negative/0 positive
Re: Заменить нули на пробелы в выходной форме FPD 2.6
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
Мда еще раз.

Никаких чисел большего размера в 11 символах размещать не надо.

В отчете под MYFIELD отведено 11 символов. Какого размера числа еще надо размещать?

Может быть так будет понятнее. Печатаем значение поля MIFIELD в формате STR(MIFIELD,11,4). Потом берем клейкую ленту или замазку и замазываем два крайних нуля.

Так понятно, надеюсь?

Но эти способы имеют известные издержки, и поэтому принято решение программно "затереть два крайних нуля". Никаких чисел большего размера в 11 символах размещать не надо. :al:



Исправлено 2 раз(а). Последнее : Simple777, 30.03.18 19:14
Ratings: 0 negative/0 positive
Re: Заменить нули на пробелы в выходной форме FPD 2.6
akvvohinc

Сообщений: 4212
Откуда: Москва
Дата регистрации: 11.11.2008
Simple777
В отчете под MYFIELD отведено 11 символов. Какого размера числа еще надо размещать?

Не просто 11 символов, а (11,4).

Игорь в своем ответе рассмотрел ситуацию, когда в поле размером (11,4) записано число, имеющее более 6 знаков под целую часть - с этого и начались разговоры о "больших числах".

Цитата:
Печатаем значение поля MIFIELD в формате STR(MIFIELD,11,4). Потом берем клейкую ленту или замазку и замазываем два крайних нуля.
Так понятно, надеюсь?

Нет.
Вопрос же не в том, в каком формате ты выводишь, а в том, числа какой величины ты попробуешь запихнуть в этот формат.
И тут никак не поможет знание того, что поле у тебя N(11,4), так как оно без проблем может хранить число 12345678.



Исправлено 1 раз(а). Последнее : akvvohinc, 30.03.18 20:09
Ratings: 0 negative/0 positive
Re: Заменить нули на пробелы в выходной форме FPD 2.6
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
У юзера нет возможности ввести число большего размера, поскольку шаблон для ввода PICTURE '999999.9999'



Исправлено 1 раз(а). Последнее : Simple777, 30.03.18 20:08
Ratings: 0 negative/0 positive
Re: Заменить нули на пробелы в выходной форме FPD 2.6
akvvohinc

Сообщений: 4212
Откуда: Москва
Дата регистрации: 11.11.2008
Simple777
У юзера нет возможности ввести число большего размера, поскольку шаблон для ввода PICTURE '999999.9999'

Даже если программа идеальна и свободна от ошибок (есть такие?), то "мусор" в таблицу попасть может и даже не одним способом.

Поэтому ты либо решаешь возможную проблему "больших чисел", либо игнорируешь ее, считая маловероятной или неважной.
Твой ответ - игнорировать! - думаю, всех устроил.
Ratings: 0 negative/0 positive
Re: Заменить нули на пробелы в выходной форме FPD 2.6
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
Ratings: 0 negative/0 positive
Re: Заменить нули на пробелы в выходной форме FPD 2.6
Igor Korolyov
Автор

Сообщений: 34580
Дата регистрации: 28.05.2002
Дело не в шаблоне, а в том что STR(11,4) умещает в 11 символов и бОльшие числа - при том не "ломается", и даже не сильно врёт (ну в e-формате сразу видно что тут лишь часть числа отображается, а для 123456789.1 - он хоть и "сместит", но отобразит целиком все циферки). Потому и желательно в своей доработке STR-а не потерять эту полезную особенность.


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Заменить нули на пробелы в выходной форме FPD 2.6
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
Когда речь идет о шаблоне вывода данных (тот же STR(11,4)) и при этом обрабатываются вычисляемые величины, то, конечно, надо учитывать, что в числе может и вовсе не быть дробной части из-за того, что точка после запятой была "сдвинута" вправо до полного ее исчезновения или что точка может быть не обязательно пятой справа. Когда же обрабатываются исходные данные, вводимые юзером по шаблону ввода, то вероятность сдвига точки вправо или полного ее исчезновения близка к нулю.
Ratings: 0 negative/0 positive
Re: Заменить нули на пробелы в выходной форме FPD 2.6
Igor Korolyov
Автор

Сообщений: 34580
Дата регистрации: 28.05.2002
Ну да ну да, это ты ещё, поди, буковок в N полях не видел Вероятность чего, по твоему, вообще должна быть нулевой...

А что, у тебя в отчёте нет под-итогов или общего итога? Или для них ты отдельную функцию мастерить будешь

Я вот считаю что если можно сравнительно задёшево сделать универсальный вариант и применить его в десятке мест, то это всяко лучше чем делать 10 отдельных узко-заточенных вариантов (один под 11,4 - другой под 15,2 и т.д.). Ну и потом весело вносить в них изменения, если вдруг потребуется...


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Заменить нули на пробелы в выходной форме FPD 2.6
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
В общем, провозился изрядно. [sm128]

Сначала убедился, что моя UDF-функция делает совсем не то, что мне надо в данном случае.

Потом проверил работу функции, предложенной Crispy. Всё "ясненько и понятненько". Для случая 11,4,2 работает.

Потом стал смотреть в разных местах (в исходниках),что там с этим количеством. Оказалось, что есть еще 3 других варианта... 11,4,4 ; 9,4,2 ; 9,4,4

Писать еще три функции не захотелось.

Тогда еще раз поизучал функцию IK. Маленько подправил для FPD (FPD не знает команд LPARAMETERS, ENDFUNC, LOCAL) И всё заработало, и притом обработка всех четырех вариантов свелась лишь к указанию разных параметров.

Поэтому в данном случае на функции IK и остановился. Получилась, действительно, универсальная функция, что довольно круто!.. :bi:

Спасибо за помощь!..



Исправлено 3 раз(а). Последнее : Simple777, 31.03.18 12:10
Ratings: 0 negative/0 positive
Re: Заменить нули на пробелы в выходной форме FPD 2.6
Crispy

Сообщений: 18571
Дата регистрации: 16.05.2005
Simple777
Потом стал смотреть в разных местах (в исходниках),что там с этим количеством. Оказалось, что есть еще 3 других варианта... 11,4,4 ; 9,4,2 ; 9,4,4
Писать еще три функции не захотелось.

Иокарный как говорится бабай.
Какие ТРИ функции??! :al: :al: :al:
Всего лишь добавляешь еще один параметр для передачи возможного доп.числа в твоих возможных наборах "11,4,4 ; 9,4,2 ; 9,4,4" - и все!! :bodr:
Ты что ли процедур/функций мало писал.
Элементарно же блин как бы. [sm128]


------------------
В действительности все иначе, чем на самом деле.
                                      (Антуан де Сент-Экзюпери)




Исправлено 1 раз(а). Последнее : Crispy, 02.04.18 10:20
Ratings: 0 negative/0 positive
Re: Заменить нули на пробелы в выходной форме FPD 2.6
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
Эх!.. :rux:
Ratings: 0 negative/0 positive
Re: Заменить нули на пробелы в выходной форме FPD 2.6
Igor Korolyov
Автор

Сообщений: 34580
Дата регистрации: 28.05.2002
Crispy
Иокарный как говорится бабай. Какие ТРИ функции??! :al: :al: :al:
Всего лишь добавляешь еще один параметр

Японский городовой, куды добавляешь!?
Crispy
PROCEDURE vyvod
PARAMETER fld
n = STR(fld,11,4)
RETURN IIF(RIGHT(n,2)='00',STUFF(n,10,2,' '),IIF(RIGHT(n,1)='0',STUFF(n,11,1,' '),n))

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


------------------
WBR, Igor
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 28 vech lili BOBAN PaulWist  (Гостей: 24)

© 2000-2024 Fox Club 
Яндекс.Метрика