powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Убрать лишние пробелы между словами
20 сообщений из 20, страница 1 из 1
Убрать лишние пробелы между словами
    #36252071
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сказали чтоб между словами был один пробел, а есть какая-нибудь функция, чтоб не разбирать значение поле по символьно...
а то функция strtran(expresion," "," "), может менять только заданное кол-во пробелов
...
Рейтинг: 0 / 0
Убрать лишние пробелы между словами
    #36252090
reware
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
q1w1e1Сказали чтоб между словами был один пробел, а есть какая-нибудь функция, чтоб не разбирать значение поле по символьно...
а то функция strtran(expresion," "," "), может менять только заданное кол-во пробелов

А написать на несколько строк кода больше рука не поднимается ?
Поле надо разбирать не посимвольно, а по словам функциями GETWORDCOUNT() и GETWORDNUM(). А разобрав, наверно, сумеется потом эти слова собрать в одну строку, вставив между ними по одному пробелу. Бином Ньютона...
...
Рейтинг: 0 / 0
Убрать лишние пробелы между словами
    #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
Убрать лишние пробелы между словами
    #36252133
AleksMed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Убрать лишние пробелы между словами
    #36252183
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, а каким гаечным ключом всё это прикрутить к Select(у), типа select my_function(moy_stroka) as stoka from moy_table....
...
Рейтинг: 0 / 0
Убрать лишние пробелы между словами
    #36252228
q1w1e1Спасибо, а каким гаечным ключом всё это прикрутить к Select(у), типа select my_function(moy_stroka) as stoka from moy_table....Вот так и прикрутить. Просто вместо my_function написать reduce.
...
Рейтинг: 0 / 0
Убрать лишние пробелы между словами
    #36252316
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не(и) фига...SELECT reduce(naim) FROM nomzen, выходит ошибка file 'reduce.prg does not exist'
...
Рейтинг: 0 / 0
Убрать лишние пробелы между словами
    #36252373
XAndy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
q1w1e1,
библиотеку подключить сначала нужно set library to ...
...
Рейтинг: 0 / 0
Убрать лишние пробелы между словами
    #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
Убрать лишние пробелы между словами
    #36252454
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне очень понравился последний вариант, я думаю, если мне удастся это прикрутить, то рейтинг в отделе у меня повысится(среди слепых и одноглазый король)...:-), и весь отдел будет привязан ко мне, как к гуру, так как изменить и понять этого никто не сможет(в том числе и я) :-)), только как и где мне откомпилить этот сишный код, и самое главное как из него сделать библиотеку, чтоб потом можно было написать, как мне заметли "Set Library to" :-)
...
Рейтинг: 0 / 0
Убрать лишние пробелы между словами
    #36252975
AleksMed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
q1w1e1"Set Library to" :-)
В коде по ссылке всё уже показано
...
Рейтинг: 0 / 0
Убрать лишние пробелы между словами
    #36253328
Dag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>>только как и где мне откомпилить этот сишный код, и самое главное как из него сделать библиотеку

Зри в корень
...
Рейтинг: 0 / 0
Убрать лишние пробелы между словами
    #36254196
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
Убрать лишние пробелы между словами
    #36254949
XAndy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dag,
сорри, я просто выдрал кусок кода :)
Код: plaintext
1.
2.
#define  p0                 (parm->p[ 0 ].val)
#define  OutMemory      182 
...
Рейтинг: 0 / 0
Убрать лишние пробелы между словами
    #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
Убрать лишние пробелы между словами
    #36263704
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

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

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

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

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

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

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

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


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