powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / GETWORDCOUNT и DLL c null character
14 сообщений из 14, страница 1 из 1
GETWORDCOUNT и DLL c null character
    #34324686
splayn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте...

После вызова функции:

LPARAMETERS cPath
public lcResult AS string , lnResult AS Integer
m.lcResult = SPACE(32000)
DECLARE INTEGER GetPrivateProfileSection IN WIN32API STRING, STRING @, INTEGER, STRING
m.lnResult = GetPrivateProfileSection(m.cPath, @lcResult, 32000, this.cFileName)
m.lcResult = LEFT(m.lcResult, m.lnResult)
CLEAR DLLS 'GetPrivateProfileSection'
RETURN m.lcResult

вот таким способом:

m.dbs = this.parent.Parentform.formparam1.getlist('Базы данных')

получаю:

m.dbs="REG_ASU=\\STAR\ASU_DB\REG_ASU.DBC P_NSI01=D:\WORCK\COMM\DOGOVOR\DB\NSI\P_NSI01.DBC P_WORK01=\\STAR\DB\COMM\P_WORK01.DBC"

Почему GETWORDCOUNT(m.dbs,' ') = 1

Не понимаю почему 1, я хочу 3.

В MSDNе написано следующее:
DWORD GetPrivateProfileSection(
LPCTSTR lpAppName, // section name
LPTSTR lpReturnedString, // return buffer
DWORD nSize, // size of return buffer
LPCTSTR lpFileName // initialization file name
);
Parameters
lpAppName
[in] Pointer to a null-terminated string specifying the name of the section in the initialization file.
lpReturnedString
[out] Pointer to a buffer that receives the key name and value pairs associated with the named section. The buffer is filled with one or more null-terminated strings; the last string is followed by a second null character.

Что такое "null character"... как его записать в GETWORDCOUNT?
...
Рейтинг: 0 / 0
GETWORDCOUNT и DLL c null character
    #34324714
Sergey Sizov.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
chr( 0 )
...
Рейтинг: 0 / 0
GETWORDCOUNT и DLL c null character
    #34324725
splayn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GETWORDCOUNT(m.dbs,CHR(0)) = 1
GETWORDCOUNT(m.dbs,' ') = 1
GETWORDCOUNT(m.dbs,CHR(1)) = 1
GETWORDCOUNT(m.dbs,CHR(2)) = 1
GETWORDCOUNT(m.dbs,CHR(3)) = 1
...
Рейтинг: 0 / 0
GETWORDCOUNT и DLL c null character
    #34325127
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как работать с ini-файлами

В твоем случае просто посмотри какое именно слово полчилось-то

?GetWordNum(m.dbs,1,' ')

Т.е. какой именно символ был воспринят как символ-разделитель слов.
...
Рейтинг: 0 / 0
GETWORDCOUNT и DLL c null character
    #34325158
fox_vik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что выдаст

GETWORDCOUNT(m.dbs)
GETWORDCOUNT(m.dbs,CHR(10))
GETWORDCOUNT(m.dbs,CHR(13))

?
...
Рейтинг: 0 / 0
GETWORDCOUNT и DLL c null character
    #34325192
fox_vik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Символ-разделитель:
Код: plaintext
1.
bbb=SUBSTR(m.dbs,LEN("REG_ASU=\\STAR\ASU_DB\REG_ASU.DBC")+ 1 , 1 )
?ASC(bbb)
...
Рейтинг: 0 / 0
GETWORDCOUNT и DLL c null character
    #34325558
splayn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fox_vikА что выдаст

GETWORDCOUNT(m.dbs)
GETWORDCOUNT(m.dbs,CHR(10))
GETWORDCOUNT(m.dbs,CHR(13))

?

А на все CHR() начиная с 0 и заканчивая 20-м (по этот я проверял) =1.

Я не могу понять какой у этих строк символ-разделитель!
...
Рейтинг: 0 / 0
GETWORDCOUNT и DLL c null character
    #34325827
qwertyqwerty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
splayn fox_vikА что выдаст

GETWORDCOUNT(m.dbs)
GETWORDCOUNT(m.dbs,CHR(10))
GETWORDCOUNT(m.dbs,CHR(13))

?

А на все CHR() начиная с 0 и заканчивая 20-м (по этот я проверял) =1.

Я не могу понять какой у этих строк символ-разделитель!

Pointer to a null-terminated string specifying the name of the section in the initialization file.
Указатель на строку с нулевым символом в конце, определяющую название раздела в файле инициализации.

1) Если посмотреть первый твой пост, то null-terminated string в С и С++ это \n - конец стоки или LF или на фоксе chr(10).

2) Но ты его в строке так просто не не увидишь - это как понимаешь не отображаемый символ.

3) В двоичном редакторе увидишь обязательно код 0Ah

4) Если проанализируешь нужную строку(как строку вдоичных данных) в цикле с выводом кода симвода увидишь где этот символ стоит.
...
Рейтинг: 0 / 0
GETWORDCOUNT и DLL c null character
    #34326027
splayn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМ Как работать с ini-файлами

В твоем случае просто посмотри какое именно слово полчилось-то

?GetWordNum(m.dbs,1,' ')

Т.е. какой именно символ был воспринят как символ-разделитель слов.

getwordnum(m.dbs,1,chr(10)) и getwordnum(m.dbs,1,chr(0)) - получаю полную строку без изменений.

И вот еще, что заметил:

at(chr(0),m.dbs)=34 !
alltrim(m.dbs,1,chr(0)) - получаю строку без разделителей, сплошной текст.

Я понимаю, что там стоят символы-разделители... мне не понятно, почему я не могу из этой строки выбрать необходимые слова между этих символов.
...
Рейтинг: 0 / 0
GETWORDCOUNT и DLL c null character
    #34326043
splayn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Причем
getwordnum(m.dbs,2,chr(0)) = ""
getwordnum(m.dbs,2,chr(10)) = ""
getwordnum(m.dbs,2," ") = ""
...
Рейтинг: 0 / 0
GETWORDCOUNT и DLL c null character
    #34326220
fox_vik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скорее всего GetWord... не понимают chr(0)
Код: plaintext
1.
aaa="Word1"+CHR( 0 )+"Word2"+CHR( 0 )+"Word3"
?GETWORDCOUNT(aaa,CHR( 0 ))
Возвращает 1 :(
VFP 9.0
...
Рейтинг: 0 / 0
GETWORDCOUNT и DLL c null character
    #34326232
fox_vik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aaa="Word1"+CHR(10)+"Word2"+CHR(10)+"Word3"
?GETWORDCOUNT(aaa,CHR(10))

Возвращает 3

Можно попробовать заменить в m.dbs все chr(0) на chr(10)
...
Рейтинг: 0 / 0
GETWORDCOUNT и DLL c null character
    #34326687
splayn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fox_vikaaa="Word1"+CHR(10)+"Word2"+CHR(10)+"Word3"
?GETWORDCOUNT(aaa,CHR(10))

Возвращает 3

Можно попробовать заменить в m.dbs все chr(0) на chr(10)

m.dbs = CHRTRAN(m.dbs,CHR(0),CHR(10))

Всем огромное спасибо... помогло...
...
Рейтинг: 0 / 0
GETWORDCOUNT и DLL c null character
    #34328427
Игорь2004
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Встроенные функции VFP GETWORDNUM( ) , GETWORDCOUNT( ) так же как и функция strfilter() из библиотеки foxtools , не работают со строкам содержащими символ с кодом нуль. Если строка содержит символ с кодом нуль, то вышеупомянутые функции возвращают неправильный результат, это связано с тем что в языке C нулевой символ интерпретируется строковыми функциями как конец строки.
Функция ALINES() корректно работает со строкам содержащими символ с кодом нуль, ее можно использовать для подсчета слов и извлечения слова, причем ее возможности значительно больше нежели у функций GETWORDNUM( ) , GETWORDCOUNT( ), хотя и синтаксис сложнее.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / GETWORDCOUNT и DLL c null character
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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