Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как считает слова GetWordNum / 19 сообщений из 19, страница 1 из 1
29.10.2007, 15:16
    #34901869
avdj
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как считает слова GetWordNum
Прошу помощи.
Есть две строки
|||240||30030|140||
|||241|60000|70000|240||

Функция GetWordCount для них возвращает разное количество слов, хотя я наивный считал сто их
одинаково должно быть
...
Рейтинг: 0 / 0
29.10.2007, 15:18
    #34901878
avdj
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как считает слова GetWordNum
.... ведь число разделителей равно.
GetWordCount(...., "|")
Соответственно после такого у меня проблема с применением GetWordNum....
Как можно обойти? Пока ищу, может кто подскажет
...
Рейтинг: 0 / 0
29.10.2007, 15:26
    #34901914
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как считает слова GetWordNum
Попробуй OCCURS("|", ...)
...
Рейтинг: 0 / 0
29.10.2007, 15:27
    #34901927
Как считает слова GetWordNum
GetWordCount() считает непустые слова.
Если нужно количество разделителей, то лучше использовать Occurs().
...
Рейтинг: 0 / 0
29.10.2007, 15:30
    #34901944
avdj
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как считает слова GetWordNum
Да, но мне надо считать 5, 6 слово, а оно может плавать по номеру. Может заменой "||" на "|-|" можно разрулить... Только я не увидел пока в фоксе что-то типа replace(cString, cStrToReplace, cReplaceStr)...
...
Рейтинг: 0 / 0
29.10.2007, 15:37
    #34901973
-=AlexiS=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как считает слова GetWordNum
? STRTRAN('|||240||30030|140||','|','|-')
...
Рейтинг: 0 / 0
29.10.2007, 15:38
    #34901974
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как считает слова GetWordNum
avdjДа, но мне надо считать 5, 6 слово, а оно может плавать по номеру. Может заменой "||" на "|-|" можно разрулить... Только я не увидел пока в фоксе что-то типа replace(cString, cStrToReplace, cReplaceStr)...

strtran('....', '||', '|-|')

Я самодельной функцией для таких целей пользуюсь:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
* Выборка подстроки из строки с разделителями
* Параметры: Строка, Разделитель, Номер элемента
func GetParam
lpara lcText, lcDelim, lnNom
local lnPos, lcT
if lnNom <  1 
	lcT = ''
else
	if lnNom =  1 
		lcT = lcText
	else
		lnPos = at(lcDelim, lcText, lnNom- 1 )
		if lnPos #  0 
			lcT = substr(lcText, lnPos + len(lcDelim))
		else
			lcT = ''
		endif
	endif
	if at(lcDelim, lcT) #  0  
		lcT = left(lcT, at(lcDelim, lcT) -  1 )
	endif
endif
return lcT
...
Рейтинг: 0 / 0
29.10.2007, 15:43
    #34901994
Sergey Sizov.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как считает слова GetWordNum
Код: plaintext
1.
?GetWordCount(strt('|||240||30030|140||','|','| '),'|')
?GetWordCount(strt('|||241|60000|70000|240||','|','| '),'|')
...
Рейтинг: 0 / 0
29.10.2007, 15:59
    #34902074
прошелмимо
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как считает слова GetWordNum
если у Вас 9-я версия фокспро, то используйте альтернативный и родной способ
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
local lcString, laArrStr[ 1 ], lnCnt 
text to lcString noshow pretext  15 
	||| 240 || 30030 | 140 ||
endtext 
for lnCnt= 1  to alines(laArrStr, lcString,  2 , "|")
	? laArrStr(lnCnt)
endfor
...
Рейтинг: 0 / 0
29.10.2007, 16:05
    #34902095
avdj
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как считает слова GetWordNum
Dima T avdjДа, но мне надо считать 5, 6 слово, а оно может плавать по номеру. Может заменой "||" на "|-|" можно разрулить... Только я не увидел пока в фоксе что-то типа replace(cString, cStrToReplace, cReplaceStr)...

strtran('....', '||', '|-|')

Я самодельной функцией для таких целей пользуюсь:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
* Выборка подстроки из строки с разделителями
* Параметры: Строка, Разделитель, Номер элемента
func GetParam
lpara lcText, lcDelim, lnNom
local lnPos, lcT
if lnNom <  1 
	lcT = ''
else
	if lnNom =  1 
		lcT = lcText
	else
		lnPos = at(lcDelim, lcText, lnNom- 1 )
		if lnPos #  0 
			lcT = substr(lcText, lnPos + len(lcDelim))
		else
			lcT = ''
		endif
	endif
	if at(lcDelim, lcT) #  0  
		lcT = left(lcT, at(lcDelim, lcT) -  1 )
	endif
endif
return lcT


То что надо!!!! Спасибо. Вопрос решен!
...
Рейтинг: 0 / 0
29.10.2007, 16:13
    #34902135
прошелмимо
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как считает слова GetWordNum
2 avdj


если у Вас 9-ка - обратите внимание на мой топик - и не шаманьте на пустом месте
...
Рейтинг: 0 / 0
29.10.2007, 16:27
    #34902230
AleksMed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как считает слова GetWordNum
прошелмимо2 avdj
если у Вас 9-ка - обратите внимание на мой топик - и не шаманьте на пустом месте
VFP7 тож рулит с ALINES()
...
Рейтинг: 0 / 0
29.10.2007, 16:50
    #34902352
прошелмимо
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как считает слова GetWordNum
2 AleksMed

ну Вы попробуйте с параметрами, как я показал
и с несколькими разделителями и хелпы сравните ...

рулит, да несколько не так как нужно ...

на 7-ке повтори
Код: plaintext
1.
lnElements = alines(lArr,lcStr, 8 ,',','[',']')
...
Рейтинг: 0 / 0
29.10.2007, 16:53
    #34902368
прошелмимо
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как считает слова GetWordNum
порули до 9-ки
Код: 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.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
local lcStr
text to lcStr noshow
[ 2 , 1 ,'№ п/п', 2 , 1 , 1 , 1 ,'xl40','']
[ 2 , 1 ,'Номер счета', 2 , 1 , 1 , 2 ,'xl40','']
[ 2 , 1 ,'Остаток на начало года', 1 , 2 , 1 , 3 ,'xl40','']
[ 2 , 1 ,'>>"Остаток на начало " & ЕСЛИ(И(МЕСЯЦ(dDate_1)=МЕСЯЦ(dDate_2); МЕСЯЦ(dDate_1-1)<>МЕСЯЦ(dDate_1); МЕСЯЦ(dDate_2+1)<>МЕСЯЦ(dDate_2)); МЕСЯЦПРОП(dDate_2; ИСТИНА) & " " & ТЕКСТ(ГОД(dDate_1);"0"); ДАТАПРОП'+'(dDate_1;4)) & "г."', 1 , 2 , 1 , 5 ,'xl40','']
[ 2 , 1 ,'>>"Оборот за " & ЕСЛИ(И(МЕСЯЦ(dDate_1)=МЕСЯЦ(dDate_2); МЕСЯЦ(dDate_1-1)<>МЕСЯЦ(dDate_1); МЕСЯЦ(dDate_2+1)<>МЕСЯЦ(dDate_2)); МЕСЯЦПРОП(dDate_2; ЛОЖЬ) & " " & ТЕКСТ(ГОД(dDate_1);"0"); "период с " & ДАТА'+'ПРОП(dDate_1;4) & "г. по " & ДАТАПРОП(dDate_2;4)) & "г."', 1 , 2 , 1 , 7 ,'xl40','']
[ 2 , 1 ,'Оборот с начала года', 1 , 2 , 1 , 9 ,'xl40','']
[ 2 , 1 ,'>>"Остаток на конец " & ЕСЛИ(И(МЕСЯЦ(dDate_1)=МЕСЯЦ(dDate_2); МЕСЯЦ(dDate_1-1)<>МЕСЯЦ(dDate_1); МЕСЯЦ(dDate_2+1)<>МЕСЯЦ(dDate_2)); МЕСЯЦПРОП(dDate_2; ИСТИНА) & " " & ТЕКСТ(ГОД(dDate_1);"0"); ДАТАПРОП('+'dDate_2;4)) & "г."', 1 , 2 , 1 , 11 ,'xl40','']
[ 2 , 1 ,'Номер журнала операций', 2 , 1 , 1 , 13 ,'xl40','']
[ 2 , 1 ,'по дебету', 1 , 1 , 2 , 3 ,'xl40','']
[ 2 , 1 ,'по кредиту', 1 , 1 , 2 , 4 ,'xl40','']
[ 2 , 1 ,'по дебету', 1 , 1 , 2 , 5 ,'xl40','']
[ 2 , 1 ,'по кредиту', 1 , 1 , 2 , 6 ,'xl40','']
[ 2 , 1 ,'по дебету', 1 , 1 , 2 , 7 ,'xl40','']
[ 2 , 1 ,'по кредиту', 1 , 1 , 2 , 8 ,'xl40','']
[ 2 , 1 ,'по дебету', 1 , 1 , 2 , 9 ,'xl40','']
[ 2 , 1 ,'по кредиту', 1 , 1 , 2 , 10 ,'xl40','']
[ 2 , 1 ,'по дебету', 1 , 1 , 2 , 11 ,'xl40','']
[ 2 , 1 ,'по кредиту', 1 , 1 , 2 , 12 ,'xl40','']
[ 2 , 1 ,'1', 1 , 1 , 3 , 1 ,'xl40','']
[ 2 , 1 ,'2', 1 , 1 , 3 , 2 ,'xl40','']
[ 2 , 1 ,'3', 1 , 1 , 3 , 3 ,'xl40','']
[ 2 , 1 ,'4', 1 , 1 , 3 , 4 ,'xl40','']
[ 2 , 1 ,'5', 1 , 1 , 3 , 5 ,'xl40','']
[ 2 , 1 ,'6', 1 , 1 , 3 , 6 ,'xl40','']
[ 2 , 1 ,'7', 1 , 1 , 3 , 7 ,'xl40','']
[ 2 , 1 ,'8', 1 , 1 , 3 , 8 ,'xl40','']
[ 2 , 1 ,'9', 1 , 1 , 3 , 9 ,'xl40','']
[ 2 , 1 ,'10', 1 , 1 , 3 , 10 ,'xl40','']
[ 2 , 1 ,'11', 1 , 1 , 3 , 11 ,'xl40','']
[ 2 , 1 ,'12', 1 , 1 , 3 , 12 ,'xl40','']
[ 2 , 1 ,'13', 1 , 1 , 3 , 13 ,'xl40','']
[ 2 , 2 ,'Итого', 1 , 2 , 1 , 1 ,'xl54','']
[ 2 , 2 ,'>>СУММСАЛЬДО(<csubsh6>; <s_3>; <s_4>; 1)', 1 , 1 , 1 , 3 ,'xl55','#,##0.00']
[ 2 , 2 ,'>>СУММСАЛЬДО(<csubsh6>; <s_3>; <s_4>; 2)', 1 , 1 , 1 , 4 ,'xl55','#,##0.00']
[ 2 , 2 ,'>>СУММСАЛЬДО(<csubsh6>; <s_5>; <s_6>; 1)', 1 , 1 , 1 , 5 ,'xl55','#,##0.00']
[ 2 , 2 ,'>>СУММСАЛЬДО(<csubsh6>; <s_5>; <s_6>; 2)', 1 , 1 , 1 , 6 ,'xl55','#,##0.00']
[ 2 , 2 ,'>>СУММ(<s_7>)', 1 , 1 , 1 , 7 ,'xl55','#,##0.00']
[ 2 , 2 ,'>>СУММ(<s_8>)', 1 , 1 , 1 , 8 ,'xl55','#,##0.00']
[ 2 , 2 ,'>>СУММ(<s_9>)', 1 , 1 , 1 , 9 ,'xl55','#,##0.00']
[ 2 , 2 ,'>>СУММ(<s_10>)', 1 , 1 , 1 , 10 ,'xl55','#,##0.00']
[ 2 , 2 ,'>>СУММСАЛЬДО(<csubsh6>; <s_11>; <s_12>; 1)', 1 , 1 , 1 , 11 ,'xl55','#,##0.00']
[ 2 , 2 ,'>>СУММСАЛЬДО(<csubsh6>; <s_11>; <s_12>; 2)', 1 , 1 , 1 , 12 ,'xl55','#,##0.00']
[ 2 , 2 ,'', 1 , 1 , 1 , 13 ,'xl56','#,##0.00']
[ 2 , 2 ,'', 1 , 1 , 2 , 1 ,'xl36','']
[ 2 , 2 ,'', 1 , 1 , 2 , 2 ,'xl36','']
[ 2 , 2 ,'', 1 , 1 , 2 , 3 ,'xl36','']
[ 2 , 2 ,'', 1 , 1 , 2 , 4 ,'xl36','']
[ 2 , 2 ,'', 1 , 1 , 2 , 5 ,'xl36','']
[ 2 , 2 ,'', 1 , 1 , 2 , 6 ,'xl36','']
[ 2 , 2 ,'', 1 , 1 , 2 , 7 ,'xl36','']
[ 2 , 2 ,'', 1 , 1 , 2 , 8 ,'xl36','']
[ 2 , 2 ,'', 1 , 1 , 2 , 9 ,'xl36','']
[ 2 , 2 ,'', 1 , 1 , 2 , 10 ,'xl36','']
[ 2 , 2 ,'', 1 , 1 , 2 , 11 ,'xl36','']
[ 2 , 2 ,'', 1 , 1 , 2 , 12 ,'xl36','']
[ 2 , 2 ,'', 1 , 1 , 2 , 13 ,'xl36','']
[ 2 , 2 ,'>>>Footer', 1 , 13 , 3 , 1 ,'xl32','']
endtext


local lArr( 1 ),lnrow, lcOld
lnRow =  0 
lnElements = alines(lArr,lcStr, 8 ,',','[',']')
for i= 1  to lnElements
    if empty(lcOld) and !empty(lArr(i))
	    lnRow=lnRow+ 1 
    	? 'строка' + str(lnRow)
    endif
    if !empty(lArr(i))
    	? lArr(i)
    endif
    lcOld = lArr(i)
endfor
...
Рейтинг: 0 / 0
29.10.2007, 17:20
    #34902519
AleksMed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как считает слова GetWordNum
прошелмимо2 AleksMed

ну Вы попробуйте с параметрами, как я показал
и с несколькими разделителями и хелпы сравните ...

рулит, да несколько не так как нужно ...

на 7-ке повтори
Код: plaintext
1.
lnElements = alines(lArr,lcStr, 8 ,',','[',']')

Сань, по тестам на предоставленных строках, возвращает по 8 слов.
Повторить lnElements = alines(lArr,lcStr,8,',','[',']') на 7-ке нельзя, там другое число параметров.
...
Рейтинг: 0 / 0
29.10.2007, 17:29
    #34902560
прошелмимо
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как считает слова GetWordNum
автортам другое число параметров

автор
Новый синтаксис функции ALINES( ) расширяет возможности выборки и обработки больших символных массивов, например анализ чувствительности к Регистру данных (case-insensitive), или обработка пустых элементов массива. Данные дополнительные возможности обеспечиваются новым параметром функции nFlags, который заменяет третий параметр lTrim. См. дополнительно раздел ALINES( ), Функция


в 9-й версии функция alines расширена, программисты получили возможность
быстро и просто обрабатывать большие объемы инф-и

вот поэтому я и толковал про 9-ку
...
Рейтинг: 0 / 0
29.10.2007, 17:33
    #34902588
прошелмимо
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как считает слова GetWordNum
авторСань, по тестам на предоставленных строках, возвращает по 8 слов

не пугай,
а то мне голову оторвут ...

все там правильно обраб-ся
...
Рейтинг: 0 / 0
29.10.2007, 17:34
    #34902595
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как считает слова GetWordNum
AleksMed прошелмимона 7-ке повтори
Код: plaintext
1.
lnElements = alines(lArr,lcStr, 8 ,',','[',']')

Сань, по тестам на предоставленных строках, возвращает по 8 слов.
Повторить lnElements = alines(lArr,lcStr,8,',','[',']') на 7-ке нельзя, там другое число параметров.
Как раз в 7 уже можно.

Отличия от 9 только в значении 3 параметра. В 7 он принимает значение только .T./.F. и эквивалентен значению 1 или 0 в 9. Т.е. контролирует факт отсечения ведущих и концевых пробелов в "словах". А количество "границ" также может быть произвольным.

Т.е. достаточно просто число 8 заменить на .F. и будет то же самое, поскольку чуствительность к регистру для скобок и запятой роли не играет.
...
Рейтинг: 0 / 0
29.10.2007, 17:41
    #34902631
AleksMed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как считает слова GetWordNum
2 alex11100 & ВМ

Ваша правда. :)
Это я не внимательно хелп зачитал.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как считает слова GetWordNum / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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