:: Архив конференции по VFP до 2005 года
Вопрос о создании таблиц.
rusl

Сообщений: 200
Откуда: СПб
Дата регистрации: 01.02.2005
Вопрос вот в чем.
Есть Папка c:\fox\ в которой находятся подпапки site_name_1, site_name_2, ... и т.д. (Соответственно получаем c:\fox\site_name_1\ и т.д.)
В этих подпапках лежат текстовые файлы text_1, text_2... и т.д. (Соответственно получаем c:\fox\site_name_1\text_1, ... и т.д.)

Каким образом можно переносить сожержимое этих подпапок в мемо-поля новых таблиц, имеющих те же имена (то есть для каждой подпапки одна таблица с тем же именем и количеством мемополей соответствующим количеству текстовых файлов в данной подпапке)?

И как можно было бы упростить этот алгоритм (и можно ли так делать вообще)? :

FUNCTION content_to_memo &&перекладывает текстовые страницы из папки c:\fox\site_1\ в таблицу site_name
CD c:\fox\site_1\
LOCAL current_catalog
LOCAL count_of_dir
LOCAL count_of_pages
current_catalog=CURDIR()
count_of_dir=ADIR(directory_info, "D") &&Заносит в массив информацию о папках и возвращает количество папок
count_of_pages =ADIR(pages_info,"*.txt") &&Заносит в массив информацию о файлах и возвращает количество файлов
IF count_of_dir != 0
LOCAL d
FOR d=1 TO count_of_dir
CD (current_catalog)+(JUSTSTEM(directory_info[i,1]))
table_name=(JUSTSTEM(directory_info[i,1]))
IF count_of_pages != 0
LOCAL i
FOR i=1 TO count_of_pages
CD c:\fox\tables\
CREATE TABLE (table_name) (m1 m)
APPEND MEMO m1 FROM table_name
ENDFOR
ENDIF
ENDFOR
ENDIF

Заранее спасибо!



Отредактировано (14.02.05 16:44)


------------------
Ratings: 0 negative/0 positive
Re: Вопрос о создании таблиц.
Mitchman

Сообщений: 9978
Откуда: Николаев
Дата регистрации: 24.05.2002
Делать можно все

только у тя по ДБФу на каждый файл получается кажись
а в тексте ты говоришь о создании одного ДБФа на папку
попей чайку/кофе и еще раз глянь на текст исходника
Ratings: 0 negative/0 positive
Re: Вопрос о создании таблиц.
Владимир Максимов

Сообщений: 14100
Откуда: Москва
Дата регистрации: 02.09.2000
Кстати, ты вообще-то запускаешь свой собственный код? Или выкладываешь так, не тестируя? Вот этот кусок

CREATE TABLE (table_name) (m1 m)
APPEND MEMO m1 FROM table_name

Работать не будет. Между этими командами надо вставить команду

APPEND BLANK

чтобы было куда записывать информацию.




------------------
Ratings: 0 negative/0 positive
Re: Вопрос о создании таблиц.
rusl

Сообщений: 200
Откуда: СПб
Дата регистрации: 01.02.2005
Владимиру Максимову

Спасибо за APPEND BLANK. Только недавно стал заниматься Фоксом и пока делаю глупые ошибки. А код я запускал, но ошибку Фокс не выдавал, хотя и таблицы не создавал.


Mitchman'у


"Делать можно все

только у тя по ДБФу на каждый файл получается кажись
а в тексте ты говоришь о создании одного ДБФа на папку
попей чайку/кофе и еще раз глянь на текст исходника"

Но ведь здесь я создаю для каждой подпапки дбф FOR d=1 TO count_of_dir ...или так не получится?

FOR d=1 TO count_of_dir
CD (current_catalog)+(JUSTSTEM(directory_info[i,1]))
table_name=(JUSTSTEM(directory_info[i,1]))
IF count_of_pages != 0
LOCAL i
FOR i=1 TO count_of_pages
CREATE TABLE (table_name) (m1 m)
APPEND BLANK
APPEND MEMO m1 FROM table_name
ENDFOR
ENDIF
ENDFOR
Ratings: 0 negative/0 positive
Re: Вопрос о создании таблиц.
Mitchman

Сообщений: 9978
Откуда: Николаев
Дата регистрации: 24.05.2002
FOR d=1 TO count_of_dir
CD (current_catalog)+(JUSTSTEM(directory_info[i,1]))
table_name=(JUSTSTEM(directory_info[i,1]))
IF count_of_pages != 0
LOCAL i
CREATE TABLE (JUSTSTEM(directory_info[i,1])) (m1 m)
FOR i=1 TO count_of_pages
APPEND BLANK
APPEND MEMO m1 FROM table_name
ENDFOR
ENDIF
ENDFOR



Отредактировано (14.02.05 19:05)


------------------
-
«свидомые украинцы озабочены не столько созданием украинской культуры, сколько уничтожением русской»
-
Олесь Бузина
Ratings: 0 negative/0 positive
Re: Вопрос о создании таблиц.
rusl

Сообщений: 200
Откуда: СПб
Дата регистрации: 01.02.2005
Спасибо большое!

Но так то теперь должно сработать? Видимых глюков вроде нет...
Ratings: 0 negative/0 positive
Re: Вопрос о создании таблиц.
rusl

Сообщений: 200
Откуда: СПб
Дата регистрации: 01.02.2005
Меня смущает, могу ли я таким образом задавать текущий каталог, откуда брать файлы:
CD (current_catalog)+(JUSTSTEM(directory_info[i,1]))
Ratings: 0 negative/0 positive
Re: Вопрос о создании таблиц.
Igor Korolyov
Автор

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

А самому попробовать?
Вообще-то более красиво будет:
CD (m.current_catalog + JUSTSTEM(directory_info[m.i, 1]))
А вообще там постоянная смена каталога не обязательна - просто где нужно
дописывается как префикс относительный путь к нужному каталогу и всё... Но
это уж сам если интересно попробуй




------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Вопрос о создании таблиц.
rusl

Сообщений: 200
Откуда: СПб
Дата регистрации: 01.02.2005
"А вообще там постоянная смена каталога не обязательна - просто где нужно
дописывается как префикс относительный путь к нужному каталогу и всё... Но
это уж сам если интересно попробуй "

Это как? Вроде APPEND MEMO m1 FROM (dir_name)\(table_name)?

А что значит m в CD [b](m.current_catalog + JUSTSTEM(directory_info[m.i, 1]))[\b]?

Заранее прошу прощение за невежество.
Ratings: 0 negative/0 positive
Re: Вопрос о создании таблиц.
Владимир Максимов

Сообщений: 14100
Откуда: Москва
Дата регистрации: 02.09.2000
Ну, попробуй так:

FUNCTION content_to_memo
* Каталого, где находятся сканируемые папки
LOCAL lcSourceCatalog
lcSourceCatalog = "c:\fox\site_1\"
* Каталог, где будут созданы таблицы
LOCAL lcTargetCatalog
lcTargetCatalog = "c:\fox\tables\"
LOCAL laDirectory(1), laFile(1)
LOCAL lnI, lnJ, lcTableName, lcTableFullName
* Внешний цикл по папкам
FOR lnI = 1 TO ADIR(laDirectory,m.lcSourceCatalog+"*.*","D")
IF INLIST(laDirectory[m.lnI,1],".","..") OR AT("D",laDirectory[m.lnI,5])=0
* Это не директория или одна из корневых директорий. Не нужно обрабатывать
LOOP
ENDIF
* Имя новой таблицы (совпадает с алиасом) Имя не должно начинаться с цифры
lcTableName = JUSTSTEM(laDirectory[m.lnI,1])
* Полное имя таблицы с путем доступа и расширением
lcTableFullName = FORCEPATH(FORCEEXT(m.lcTableName,"DBF"),m.lcTargetCatalog)
* Проверям факт существования таблицы с нужным именем
IF FILE(m.lcTableFullName)
* Если есть, то проверям не открыта ли она уже
IF USED(m.lcTableName)=.F.
USE (m.lcTableFullName) IN 0
ENDIF
ELSE
CREATE TABLE (m.lcTableFullName) (FileName C(50), Content M)
ENDIF
* Цикл по списку текстовых файлов в одной директории
SELECT (m.lcTableName)
FOR m.lnJ = 1 TO ADIR(laFile,m.lcSourceCatalog+laDirectory[m.lnI,1]+"\*.txt")
LOCATE FOR FileName = PADR(laFile[m.lnJ,1],50)
IF FOUND() = .T.
* Этот файл уже был закачан. Ничего не делаем
LOOP
ENDIF
INSERT INTO (m.lcTableName) (FileName) VALUES (laFile[m.lnJ,1])
APPEND MEMO Content FROM (FORCEPATH(laFile[m.lnJ,1],m.lcSourceCatalog+laDirectory[m.lnI,1]))
ENDFOR
ENDFOR




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


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

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

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