Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Убрать лишние пробелы между словами / 20 сообщений из 20, страница 1 из 1
15.10.2009, 08:48
    #36252071
q1w1e1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убрать лишние пробелы между словами
Сказали чтоб между словами был один пробел, а есть какая-нибудь функция, чтоб не разбирать значение поле по символьно...
а то функция strtran(expresion," "," "), может менять только заданное кол-во пробелов
...
Рейтинг: 0 / 0
15.10.2009, 09:01
    #36252090
reware
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убрать лишние пробелы между словами
q1w1e1Сказали чтоб между словами был один пробел, а есть какая-нибудь функция, чтоб не разбирать значение поле по символьно...
а то функция strtran(expresion," "," "), может менять только заданное кол-во пробелов

А написать на несколько строк кода больше рука не поднимается ?
Поле надо разбирать не посимвольно, а по словам функциями GETWORDCOUNT() и GETWORDNUM(). А разобрав, наверно, сумеется потом эти слова собрать в одну строку, вставив между ними по одному пробелу. Бином Ньютона...
...
Рейтинг: 0 / 0
15.10.2009, 09:12
    #36252120
reware
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убрать лишние пробелы между словами
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
PARAMETERS victim
LOCAL vlen, i, res
vlen=GETWORDCOUNT(victim," ")
IF vlen= 0 
	RETURN ""
ENDIF
res=""
FOR i= 1  TO vlen
	res=res+GETWORDNUM(victim, i, " ")+" "
NEXT
RETURN RTRIM(res)
...
Рейтинг: 0 / 0
15.10.2009, 09:20
    #36252133
AleksMed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убрать лишние пробелы между словами
...
Рейтинг: 0 / 0
15.10.2009, 09:42
    #36252183
q1w1e1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убрать лишние пробелы между словами
Спасибо, а каким гаечным ключом всё это прикрутить к Select(у), типа select my_function(moy_stroka) as stoka from moy_table....
...
Рейтинг: 0 / 0
15.10.2009, 10:01
    #36252228
Убрать лишние пробелы между словами
q1w1e1Спасибо, а каким гаечным ключом всё это прикрутить к Select(у), типа select my_function(moy_stroka) as stoka from moy_table....Вот так и прикрутить. Просто вместо my_function написать reduce.
...
Рейтинг: 0 / 0
15.10.2009, 10:30
    #36252316
q1w1e1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убрать лишние пробелы между словами
не(и) фига...SELECT reduce(naim) FROM nomzen, выходит ошибка file 'reduce.prg does not exist'
...
Рейтинг: 0 / 0
15.10.2009, 10:43
    #36252373
XAndy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убрать лишние пробелы между словами
q1w1e1,
библиотеку подключить сначала нужно set library to ...
...
Рейтинг: 0 / 0
15.10.2009, 10:44
    #36252375
XAndy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убрать лишние пробелы между словами
Ещё пару способов. Если лень написать нормальную посимвольную функцию, то хотя бы так можно :)
Код: plaintext
1.
2.
3.
do while "  "$cStr
   cStr = strtran(cStr,"  "," ")
enddo

Ну а если нужна скорость, в том числе для использования в запросах, то так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
void far Reduce(ParamBlk FAR *parm)
{
    BYTE FAR *instr, FAR *outstr, chr;
    int i, len, flag =  1 ;

    _HLock(p0.ev_handle);                       // инициализация instr;
    len = p0.ev_length;
    instr = _HandToPtr(p0.ev_handle);
    outstr = instr -  1 ;

    for (i= 0 ; i<len; i++) {     // удаление лидирующих и избыточных пробелов;
        chr = *(instr+i);
        if (chr!=' ' || !flag) *(++outstr) = chr;
        flag = (chr==' ');
    }
                                            // удаление завершающих пробелов;
    while (outstr>=instr && *outstr==' ') outstr--;
    len = outstr - instr +  1 ;

    if (p0.ev_length!=(unsigned int)len) {                // возврат результата;
       if (!_SetHandSize(p0.ev_handle, len)) _Error(OutMemory);
       p0.ev_length = len;
    }
    _RetVal(&p0);
    _HUnLock(p0.ev_handle);
}
...
Рейтинг: 0 / 0
15.10.2009, 11:03
    #36252454
q1w1e1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убрать лишние пробелы между словами
Мне очень понравился последний вариант, я думаю, если мне удастся это прикрутить, то рейтинг в отделе у меня повысится(среди слепых и одноглазый король)...:-), и весь отдел будет привязан ко мне, как к гуру, так как изменить и понять этого никто не сможет(в том числе и я) :-)), только как и где мне откомпилить этот сишный код, и самое главное как из него сделать библиотеку, чтоб потом можно было написать, как мне заметли "Set Library to" :-)
...
Рейтинг: 0 / 0
15.10.2009, 13:23
    #36252975
AleksMed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убрать лишние пробелы между словами
q1w1e1"Set Library to" :-)
В коде по ссылке всё уже показано
...
Рейтинг: 0 / 0
15.10.2009, 14:51
    #36253328
Dag
Dag
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убрать лишние пробелы между словами
>>только как и где мне откомпилить этот сишный код, и самое главное как из него сделать библиотеку

Зри в корень
...
Рейтинг: 0 / 0
15.10.2009, 19:46
    #36254196
Dag
Dag
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убрать лишние пробелы между словами
XAndy

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
--------------------Configuration: newproba - Win32 Release--------------------
Compiling...
newproba.cpp
C:\CPP\newproba\newproba.cpp( 21 ) : error C2065: 'p0' : undeclared identifier
C:\CPP\newproba\newproba.cpp( 21 ) : error C2228: left of '.ev_handle' must have class/struct/union type
C:\CPP\newproba\newproba.cpp( 22 ) : error C2228: left of '.ev_length' must have class/struct/union type
C:\CPP\newproba\newproba.cpp( 23 ) : error C2228: left of '.ev_handle' must have class/struct/union type
C:\CPP\newproba\newproba.cpp( 35 ) : error C2228: left of '.ev_length' must have class/struct/union type
C:\CPP\newproba\newproba.cpp( 36 ) : error C2228: left of '.ev_handle' must have class/struct/union type
C:\CPP\newproba\newproba.cpp( 36 ) : error C2065: 'OutMemory' : undeclared identifier
C:\CPP\newproba\newproba.cpp( 37 ) : error C2228: left of '.ev_length' must have class/struct/union type
C:\CPP\newproba\newproba.cpp( 40 ) : error C2228: left of '.ev_handle' must have class/struct/union type
Error executing cl.exe.

newproba.fll -  9  error(s),  0  warning(s)

А кто такой p0 ?
...
Рейтинг: 0 / 0
16.10.2009, 10:50
    #36254949
XAndy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убрать лишние пробелы между словами
Dag,
сорри, я просто выдрал кусок кода :)
Код: plaintext
1.
2.
#define  p0                 (parm->p[ 0 ].val)
#define  OutMemory      182 
...
Рейтинг: 0 / 0
16.10.2009, 12:38
    #36255360
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убрать лишние пробелы между словами
Можно так пробелы убирать:
Код: plaintext
1.
lcText = '1 2  3   4    5     6      7      8'
? chrtran(strtran(strtran(lcText, '  ', ' ' + chr( 0 )), chr( 0 ) + ' ', ''), chr( 0 ), '')
...
Рейтинг: 0 / 0
21.10.2009, 11:24
    #36263704
q1w1e1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убрать лишние пробелы между словами
Dima T,

спасибо, как раз можно использовать в Selecte этот набор из стандартных функций :-)
...
Рейтинг: 0 / 0
06.12.2009, 05:02
    #36350431
guest12345
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убрать лишние пробелы между словами
q1w1e1,

такая тема была ранее
/topic/508208&hl=reduce

хотя я не понимаю, почему нельзя было использовать

aa= 'ddd 35 65 86 56'
? chrtran(aa,' ','')
...
Рейтинг: 0 / 0
06.12.2009, 05:06
    #36350435
guest12345
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убрать лишние пробелы между словами
не заметил, что уже было выше

do while " "$cStr
cStr = strtran(cStr," "," ")
enddo

aa= 'ddd 35 65 86 56'
? chrtran(aa,' ',' ')
...
Рейтинг: 0 / 0
10.12.2009, 09:33
    #36358259
Crispy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убрать лишние пробелы между словами
a='fsfsf'+space(5)+'hkkejej'+space(10)+'sfs gfhdjhd fhrhr '
?a

SET LIBRARY TO SYS(2004)+"foxtools.fll"
? reduce(a,' ')
...
Рейтинг: 0 / 0
10.12.2009, 09:37
    #36358268
Crispy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убрать лишние пробелы между словами
Короче велосипед. :D
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Убрать лишние пробелы между словами / 20 сообщений из 20, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]