:: Архив конференции по VFP до 2005 года
Аномалия.
rusl
Автор

Сообщений: 200
Откуда: СПб
Дата регистрации: 01.02.2005
У меня какая то анамалия в программе:
Создаю таблицы lcTableName циклом, но вторая таблица выходит с глюком.
Всего сейчас в директории 4 папки (site_txt1, site_txt2, site_txt3, site_txt4) и соответственно получается четыре таблицы lcTableName (t_site_txt2, t_site_txt1, t_site_txt3, t_site_txt4).

Но вторая таблица почему то обрабатывается циклом в первую очередь, затем идет первая, третья и четвертая. И у второй таблицы второе и третье поля поменялись местами:

http://www.rusl.ru/img/fox-screen4.gif

CLOSE ALL
CLEAR
SET default TO c:\fox\dproject\
DO content_to_freq
FUNCTION content_to_freq
LOCAL lcSourceCatalog
lcSourceCatalog = "c:\fox\content\"
LOCAL lcTargetCatalog
lcTargetCatalog = "c:\fox\dproject\frequency_tables\"
CD (lcTargetCatalog)
LOCAL laDirectory(1), laFile(1)
LOCAL lnI, lnJ, lnA, lcTableName, lcTableFullName, lcCursorName, lcCursorFullName, lcFileStr, lnCountOfWords, lcWord
SET SAFETY OFF
CREATE DATABASE DATADPRO
CREATE TABLE TablesOfTheme ( TableName c(50))
lnD=ADIR(laDirectory,m.lcSourceCatalog+"*.*","D")
FOR lnI = 1 TO lnD
IF INLIST(laDirectory[m.lnI,1],".","..") OR AT("D",laDirectory[m.lnI,5])=0
LOOP
ENDIF
lcTableName = 't_'+JUSTSTEM(laDirectory[m.lnI,1])
lcTableNameID = 'ID_'+JUSTSTEM(laDirectory[m.lnI,1])
lcCursorName1 = 'c1_'+JUSTSTEM(laDirectory[m.lnI,1])
lnl = 'lnl_'+JUSTSTEM(laDirectory[m.lnI,1])
lnl2 = 'lnl2_'+JUSTSTEM(laDirectory[m.lnI,1])
SELECT TablesOfTheme
APPEND BLANK
REPLACE TableName WITH lcTableName
lcTableFullName = FORCEPATH(FORCEEXT(m.lcTableName,"DBF"),m.lcTargetCatalog)
lcTableFullNameID = FORCEPATH(FORCEEXT(m.lcTableNameID,"DBF"),m.lcTargetCatalog)
CREATE TABLE (m.lcTableFullNameID) (FileName C(50), FileNameID I, CountOfWords I)
CREATE CURSOR (lnl) (FileNameID I, SubWord C(50), CountEqual I)
CREATE CURSOR (lnl2) (FileNameID I, SubWord C(50), CountEqual I)
CREATE CURSOR (lcCursorName1) (FileNameID I, SubWord C(50))
SELECT (m.lcCursorName1)
GO TOP
FOR m.lnJ = 1 TO ADIR(laFile,m.lcSourceCatalog+laDirectory[m.lnI,1]+"\*.txt")
lcFileStr=FILETOSTR(m.lcSourceCatalog+laDirectory[m.lnI,1]+"\"+laFile[m.lnJ,1])
lcFileStr=ChrTran(lcFileStr,CHR(13)+CHR(10),SPACE(2))
lnCountOfWords=GETWORDCOUNT(lcFileStr)
SELECT (m.lcTableNameID)
APPEND BLANK
replace FileName WITH laFile[m.lnJ,1]
replace FileNameID WITH lnJ
replace CountOfWords WITH lnCountOfWords
SELECT (m.lcCursorName1)
FOR m.lnA=1 TO (lnCountOfWords)
lcWord=LOWER(GETWORDNUM(lcFileStr, m.lnA))
lcWord=CHRTRAN(lcWord, ',', '')
lcWord=CHRTRAN(lcWord, '.', '')
lcWord=CHRTRAN(lcWord, '+', '')
lcWord=CHRTRAN(lcWord, '?', '')
lcWord=CHRTRAN(lcWord, ':', '')
lcWord=CHRTRAN(lcWord, ';', '')
lcWord=CHRTRAN(lcWord, '*', '')
lcWord=CHRTRAN(lcWord, '$', '')
lcWord=CHRTRAN(lcWord, '\', '')
lcWord=CHRTRAN(lcWord, '/', '')
lcWord=CHRTRAN(lcWord, '|', '')
lcWord=CHRTRAN(lcWord, '(', '')
lcWord=CHRTRAN(lcWord, ')', '')
lcWord=CHRTRAN(lcWord, '-', '')
lcWord=CHRTRAN(lcWord, '&', '')
lcWord=CHRTRAN(lcWord, '"', '')
lcWord=CHRTRAN(lcWord, ' ', '')
lcWord=CHRTRAN(lcWord, '<', '')
lcWord=CHRTRAN(lcWord, '>', '')
lcWord=CHRTRAN(lcWord, '#', '')
lcWord=CHRTRAN(lcWord, '[', '')
lcWord=CHRTRAN(lcWord, ']', '')
lcWord=CHRTRAN(lcWord, '{', '')
lcWord=CHRTRAN(lcWord, '}', '')
APPEND BLANK
REPLACE FileNameID WITH lnJ
REPLACE SubWord WITH lcWord
ENDFOR
ENDFOR
SELECT FileNameID, SubWord, COUNT(SubWord) AS CountEqual FROM (m.lcCursorName1) ;
GROUP BY FileNameID, SubWord INTO CURSOR lnl
SELECT lnl.FileNameID, SUM(lnl.CountEqual) AS CountEqual ;
FROM lnl GROUP BY FileNameID INTO CURSOR lnl2
SELECT lnl.FileNameID, lnl.SubWord, (lnl.CountEqual/lnl2.CountEqual)+0.0000000000 AS Frequency ;
FROM lnl ;
LEFT OUTER JOIN lnl2 ON lnl.FileNameID=lnl2.FileNameID ;
INTO TABLE (lcTableName)
ENDFOR
RETURN
Ratings: 0 negative/0 positive
Re: Аномалия.
po2

Сообщений: 2864
Откуда: Иркутск
Дата регистрации: 22.12.2001
Результат работы ADIR() неотсортированный массив?
Ratings: 0 negative/0 positive
Re: Аномалия.
rusl
Автор

Сообщений: 200
Откуда: СПб
Дата регистрации: 01.02.2005
Ну да. С ним никаких операций не проводилось.

Но посмотрите на названия элементов массива, они "природно" отсортированы.
Ratings: 0 negative/0 positive
Re: Аномалия.
Владимир Максимов

Сообщений: 14093
Откуда: Москва
Дата регистрации: 02.09.2000
Цитата:
Но вторая таблица почему то обрабатывается циклом в первую очередь, затем идет первая, третья и четвертая. И у второй таблицы второе и третье поля поменялись
Как ты это определил?

В твоем случае, порядок обработки и создания таблиц можно посмотреть по содержимому таблицы TablesOfTheme. В каком порядке они там записаны, так они и создаются.

Тот порядок следования полей, который отображен на экране вовсе не обязательно соответствует реальному порядку следования полей. Ведь на экране всего-лишь результат команды BROWSE. А по умолчанию эта команда дается в синтаксисе BROWSE LAST, т.е. она отображается так, как была отображена в последний раз. Дай явно в командном окне команду BROWSE без каких-либо дополнительных опций.

Более точно, о порядке следования полей можно узнать используя функцию AFIELDS().




------------------
Ratings: 0 negative/0 positive
Re: Аномалия.
rusl
Автор

Сообщений: 200
Откуда: СПб
Дата регистрации: 01.02.2005
"В твоем случае, порядок обработки и создания таблиц можно посмотреть по содержимому таблицы TablesOfTheme. В каком порядке они там записаны, так они и создаются."

Да, там сначала идет вторая таблица. Но как она туда попала то?!
Ratings: 0 negative/0 positive
Re: Аномалия.
po2

Сообщений: 2864
Откуда: Иркутск
Дата регистрации: 22.12.2001
Порядок разещения имен в FAT'е физический. Каталог с именем site_txt2 очевидно был создан первым. Ничего не меняя в коде, выполни MOVE папки куда-нибудь, а потом верни её назад. Сравни результат работы ADIR до-и-после.



Отредактировано (22.02.05 17:52)


------------------
Ratings: 0 negative/0 positive
Re: Аномалия.
rusl
Автор

Сообщений: 200
Откуда: СПб
Дата регистрации: 01.02.2005
"Порядок разещения имен в FAT'е физический. Каталог с именем site_txt2 очевидно был создан первым. Ничего не меняя в коде, выполни MOVE папки куда-нибудь, а потом верни её назад. Сравни результат работы ADIR до-и-после."

Вы правы. Теперь он идет последним.

Но поля в этой таблице все равно не на месте. Думаю, потому что не послушал советов Владимира Максимова..
Ratings: 0 negative/0 positive
Re: Аномалия.
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Hi, rusl!

1) В Фоксе есть отличный инструмент - Debugger - он же отладчик - запустив
свой пример в пошаговом режиме (Это можно сделать кучей способов - например
поставить в начале SET STEP ON, или открыв дебаггер там открыть свою
программу), можно самому за ОЧЕНЬ короткое время найти корень проблемы - там
видно всё что нужно.

2) Попробуй lcWord=CHRTRAN(lcWord, ',.+?:;', '') - думаю ты понял идею
Кстати есть интересный подход к "лишним символам" - с другой стороны их
давить:
lcWord=CHRTRAN(lcWord, CHRTRAN(lcWord, 'abcdef...xyz', ''), '') - оставит
лишь перечисленные внутри символы




------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Аномалия.
rusl
Автор

Сообщений: 200
Откуда: СПб
Дата регистрации: 01.02.2005
"Кстати есть интересный подход к "лишним символам" - с другой стороны их
давить:
lcWord=CHRTRAN(lcWord, CHRTRAN(lcWord, 'abcdef...xyz', ''), '') - оставит
лишь перечисленные внутри символы "

А в этом случае буквы регистрозависимые?
Ratings: 0 negative/0 positive
Re: Аномалия.
AleksM

Сообщений: 17881
Дата регистрации: 11.11.2003
Цитата:
А в этом случае буквы регистрозависимые?

Конечно.




------------------
Лучше переесть, чем недоспать.
Не спеши, а то успеешь.
Ratings: 0 negative/0 positive


Извините, но у вас нет прав для того, чтобы оставлять сообщения в этом форуме.

On-line: 4 (Гостей: 4)

© 2000-2024 Fox Club 
Яндекс.Метрика