:: Архив конференции по VFP до 2005 года
Как организовать работу с папками прораммно?
rusl
Автор

Сообщений: 200
Откуда: СПб
Дата регистрации: 01.02.2005
Имеется папка Top, в которой расположены блоки тем (Arts, Business,...). В каждом из этих блоков лежат папки с темами (для Arts: Animation, Architecture,...). В каждой из тем лежат папки с сайтами. В папках сайта лежат их страницы в текстовом виде. c:\fox\top\Arts\Animation\site001\textpege001.txt

С добычей информации из папок вроде разобрался (хотя еще не запускал программу, так что не совсем уверен что сработает).

Проблема в следующем.
1. Как организовать сброс готовых таблиц в определенные папки с такой же структурой дерева как и у текстовых файлов?
Т.е. c:\fox\top\programm\resultingtables\Arts\Animation\resultingtable.dbf

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

2. И как по вашему, сбор информации по директориям организованый таким образом сработает?
(не могу пока запустить программу, так как еще не закончил сброс).


FUNCTION content_to_freq
*Центральный каталог контента
LOCAL lcTopCatalog, lnTopA, lnTopD
lcTopCatalog="c:\fox\top\"
lnTopD=ADIR(laTopDirectory,m.lcTopCatalog+"*.*","D")
FOR lnTopA = 1 TO lnTopD
*Каталоги для папок второго уровня (Arts, Business,...)
LOCAL lcBlockCatalog, lnBlockA, lnBlockD
lcBlockCatalog="c:\fox\top\"+ laTopDirectory[m.lnTopA,1]
lnBlockD=ADIR(laBlockDirectory,m.lcBlockCatalog+"*.*","D")
FOR lnBlockA = 1 TO lnBlockD
*Каталоги для папок третьего уровня (Animation, Architecture,...)
LOCAL lcThemeCatalog, lnThemeA, lnThemeD
lcThemeCatalog="c:\fox\top\"+ laBlockDirectory[m.lnTopA,1]
lnThemeD=ADIR(laThemeDirectory,m.lcThemeCatalog+"*.*","D")
FOR lnThemeA = 1 TO lnThemeD
*Каталоги, куда будут сохраняться таблицы (вот отсюда то и не соображуб как организовать запись)
LOCAL lcTargetCatalog
lcTargetCatalog = CHRTRAN(lcThemeCatalog, 'c:\fox\top\', 'c:\fox\dproject\tables\' )
CD (lcTargetCatalog)
LOCAL laDirectory(1), laFile(1)
LOCAL lnI, lnJ, lnA, lcTableName, lcTableFullName, lcCursorName, lcCursorFullName,;
lcFileStr, lnCountOfWords, lcWord, lcS, lnC, lnS
SET SAFETY OFF
CREATE DATABASE DATADPRO
CREATE TABLE TableNameID (FileName C(50), FileNameID I, CountOfWords I)
CREATE TABLE DataTable (FileNameID I, SubWord C(50), Frequency N(11,9))
lnS=0
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
nStart1=SECONDS()
lcCursorName1 = 'c'+JUSTSTEM(laDirectory[m.lnI,1])+'_c1'
lnl = 'c'+JUSTSTEM(laDirectory[m.lnI,1]) +'_lnl'
lnl2 = 'c'+JUSTSTEM(laDirectory[m.lnI,1]) +'_lnl2'
lnl3 = 'c'+JUSTSTEM(laDirectory[m.lnI,1]) +'_lnl3'
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)
lnC=lnJ+lnS
SELECT TableNameID
APPEND BLANK
replace FileName WITH laFile[m.lnJ,1]
replace FileNameID WITH lnC
replace CountOfWords WITH lnCountOfWords
SELECT (m.lcCursorName1)
FOR m.lnA=1 TO (lnCountOfWords)
lcWord=LOWER(GETWORDNUM(lcFileStr, m.lnA))
lcWord=ALLTRIM(CHRTRAN(lcWord, CHRTRAN(lcWord, 'qwertyuiopasdfghjklzxcvbnm', ''), ''))
IF EMPTY(lcWord)=.F.
APPEND BLANK
REPLACE FileNameID WITH lnC
REPLACE SubWord WITH lcWord
ENDIF
ENDFOR
ENDFOR
lnS= lnS+ADIR(laFile,m.lcSourceCatalog+laDirectory[m.lnI,1]+"\*.txt")
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 CURSOR (lnl3)
INSERT INTO DataTable (FileNameID, SubWord, Frequency) ;
SELECT FileNameID, SubWord, Frequency FROM (lnl3) ;
ORDER BY FileNameID, Frequency DESC
ENDFOR
ENDFOR
ENDFOR
ENDFOR
RETURN



Отредактировано (05.03.05 18:20)


------------------
Ratings: 0 negative/0 positive


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

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

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