|
|
|
Странный глюк фокса:(
|
|||
|---|---|---|---|
|
#18+
есть такой код: SELECT M_GR, ALLTRIM(removenull(M_ADR)) as m_adr, DATE1, TIME1, M_VAL FROM MPRIMARY INTO CURSOR cNotDouble ; GROUP BY M_GR, M_ADR, DATE1, TIME1 NOFILTER функция: ********************************** PROCEDURE removenull(stroka) ********************************** *stroka - символьная строка формата 0000...хххх нужно убрать лишние нули *возвращает или ххх...х или 0х LOCAL str_len, i stroka=ALLTRIM(stroka) str_len = LEN(stroka) FOR i=1 TO str_len IF SUBSTR(stroka, i, 1) != '0' .and. SUBSTR(stroka, i, 1) != ' ' stroka = ALLTRIM(SUBSTR(stroka, i)) EXIT ENDIF ENDFOR IF len(stroka)<=1 stroka = '0'+stroka ENDIF RETURN stroka Так вот в таком виде это работало и все ок. пока однажды не натолкнулся на след. случай: m_adr для некоторых записей был равен '00000031', потом где то столько же записей был равен '00000100', потом '00000017'. всего записей около 16000 и после селекта(см. выше) m_adr где должен был быть равен '100' оказался равен '10' вот такой вот фокус. причем это поведение очень не стабильно. оставил в mprimary только записи где m_adr='00000100' и все отработало как надо. пришлось переделать select в след. конструкцию: SELECT M_GR, M_ADR, DATE1, TIME1, M_VAL FROM MPRIMARY INTO CURSOR cNotDouble1 ; GROUP BY M_GR, M_ADR, DATE1, TIME1 NOFILTER GO TOP IN cnotdouble1 CREATE CURSOR cNotDouble(M_GR N(3), M_ADR C(15), DATE1 C(10), TIME1 C(5), M_VAL N(12,2)) DO WHILE !EOF("cNotDouble1") APPEND BLANK IN cNotDouble replace m_gr WITH cNotDouble1.m_gr, ; m_adr WITH removenull(cNotDouble1.M_ADR), ; date1 WITH cNotDouble1.date1, ; time1 WITH cNotDouble1.time1, ; m_val WITH cNotDouble1.m_val IN cNotDouble SKIP IN cNotDouble1 ENDDO в таком виде вроде работает, но такое поведение фокса мне не понятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2005, 12:46 |
|
||
|
Странный глюк фокса:(
|
|||
|---|---|---|---|
|
#18+
strtran(ltrim(strtran(mystr,'0',' ')),' ','0') ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2005, 12:59 |
|
||
|
Странный глюк фокса:(
|
|||
|---|---|---|---|
|
#18+
mystr=iif(at('.',mystr)=2,'0','')+strtran(ltrim(strtran(mystr,'0',' ')),' ','0') ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2005, 13:09 |
|
||
|
Странный глюк фокса:(
|
|||
|---|---|---|---|
|
#18+
если в запросе вычисляемое поле вроде ALLTRIM(removenull(M_ADR)) as m_adr то размерность поля в результате вычисляется по первым строчкам (вроде бы, или как-то ещё) т.е. alltrim(sname) из иванов петров сидоров может вернуть иванов петров сидоро надо стразу размерность задавать вроде padr(alltrim(sname)," ",20) - не помню синтаксис ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2005, 13:10 |
|
||
|
Странный глюк фокса:(
|
|||
|---|---|---|---|
|
#18+
правильно сказал тогда mystr=padr(iif(at('.',mystr)=2,'0','')+strtran(ltrim(strtran(mystr,'0',' ')),' ','0'),nn) где nn нужный размер поля ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2005, 13:13 |
|
||
|
Странный глюк фокса:(
|
|||
|---|---|---|---|
|
#18+
понятно. спасибо. впервые узнал что селект так делает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2005, 14:18 |
|
||
|
Странный глюк фокса:(
|
|||
|---|---|---|---|
|
#18+
Интересно за что так народ любит функцию STRTRAN() ? И лепит с ней огромные и трудночитаемые конструкции типа strtran(ltrim(strtran(mystr,'0',' ')),' ','0') когда можно легко убрать любое количество любых символов вот так: chrtran(mystr,' 0','') В данном случае уберуться все пробелы и нули. И эта функция значительно быстрее strtran() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2005, 15:03 |
|
||
|
Странный глюк фокса:(
|
|||
|---|---|---|---|
|
#18+
2Sergey Sizov. Вы наверное разобрали весь код по косточкам почитайте вопрос и подумайте а стоит ли убирать все нули? или может нужно оставить те нули которые справа а ? Как Вы считаете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2005, 15:12 |
|
||
|
Странный глюк фокса:(
|
|||
|---|---|---|---|
|
#18+
Это называется слишком сильно разогнался и не успел затормозить :) Непосредственно перед этим наткнулся на такой шедевр: func IsNeCifra param InString * проверка наличия нецифровых знаков if Empty(allt(strt(strt(strt(strt(strt(strt(strt(strt(strt(strt(strt(InString),'9',''),'8',''),'7',''),'6',''),'5',''),'4',''),'3',''),'2',''),'1',''),'0',''),'-',''))) Return .f. else return .t. endif хотя тот же результат получается так: func IsNeCifra param InString return Len(allt(chrt(InString,'0123456789-','')))=0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2005, 17:02 |
|
||
|
Странный глюк фокса:(
|
|||
|---|---|---|---|
|
#18+
Ну это по-разному бывает :). Вот в вашем случае например. Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2005, 17:31 |
|
||
|
Странный глюк фокса:(
|
|||
|---|---|---|---|
|
#18+
Способ проверки пустоты полученой строки - это уже вопрос вкуса. Не так ли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2005, 20:25 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=33046329&tid=1594302]: |
0ms |
get settings: |
9ms |
get forum list: |
17ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
162ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
| others: | 231ms |
| total: | 494ms |

| 0 / 0 |
