:: Не фоксом единым
Групповая распаковка по маске
boba
Автор

Сообщений: 6269
Откуда: Медвежьи озера-
Дата регистрации: 26.03.2001
Есть некая директория,
где среди прочего есть zip файлы (немеряно их)
, названия которых начинаются на qcl
В каждом архиве есть много чего,
но всегда есть файл в названии которого
есть слово daily. Но , название начинается с года и месяца
Есть и другие имена файлов.
Тип файлов csv
Нужно написать конвейер,
который в одну таблицу импортирует все эти файлы
Распаковать сразу все zip не могу,
распакованные файлы весят больше всех моих дисков.
Поэтому все должно работать так,
взял в цикле архив, распаковал оттуда только
нужный файл, импортировал в таблицу,
стер файл. Итд
Пройти по всем нужным файлам, не проблема,
импорт не проблема,
не соображу , как раззиповать только
нужный файл. Он может иметь имя 202101daily,
201902daily итд
Другие типы имен должны попасть в другие таблицы
*hours, *month
Ratings: 0 negative/0 positive
Re: Групповая распаковка по маске
ssa

Сообщений: 13008
Откуда: Москва
Дата регистрации: 23.03.2005
На чем можно писать сей конвейер?


------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: Групповая распаковка по маске
boba
Автор

Сообщений: 6269
Откуда: Медвежьи озера-
Дата регистрации: 26.03.2001
на фоксе, конечно.
Да это и значения не имеет никакого
Ratings: 0 negative/0 positive
Re: Групповая распаковка по маске
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
boba
на фоксе, конечно.
Да это и значения не имеет никакого
Это имеет значение, т.к. для разных языков/систем существуют разные библиотеки распаковки zip-архивов с очень разными возможностями.
Для дотнета всё тривиально:

Для фокса - ну наверное проще всего будет задействовать 7z
7z e *.zip -oD:\MyOutputFolder *daily* -r
Ну или, если размеры большие, по одному архивы подсовывать утилите, зачищая выходную папку после обработки очередного архива.


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Групповая распаковка по маске
PaulWist

Сообщений: 14621
Дата регистрации: 01.04.2004
forum.foxclub.ru

В цикле проверить файл по маске и нужный распаковать.


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: Групповая распаковка по маске
boba
Автор

Сообщений: 6269
Откуда: Медвежьи озера-
Дата регистрации: 26.03.2001
я похоже неверно объяснил
Имена файлов не называются daily
Вопрос с именами решается банальным
sys(2000
Это внутри каждого архива есть среди множества файлов
файл, содержащий в имени daily
Только их и нужно вытащить
Содержание каждого архива огромно
Сначала я выгребал все файлы подряд,
импортировал в фокс нужные,
потом стирал разархивированное,
и шел в цикле на другой архив
Через пол часа истратил весь диск
Ratings: 0 negative/0 positive
Re: Групповая распаковка по маске
PaulWist

Сообщений: 14621
Дата регистрации: 01.04.2004
Володь, не надо извлекать из архива (ты не все ветки прочитал), в архиве можно проверить, что за файл

o=CREATEOBJECT("shell.application")
FOR EACH ofile IN o.NameSpace(cSource).items
?ofile.Name
ENDFOR


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: Групповая распаковка по маске
boba
Автор

Сообщений: 6269
Откуда: Медвежьи озера-
Дата регистрации: 26.03.2001
Попробовал попрактиковаться на коротких архивах
Но они расширение gz
Код дает оле ошибку
Архиватор сам такие файлы открывает
Попробовал в цикле переименовать
Объект внутренностей не видит
***m.o.NameSpace(fln).Items.count = 0

m.o = Createobject("Shell.Application")

fln = SYS(5)+CURDIR()+Sys(2000,'*.gz')
RENAME (fln) TO (SYS(5)+CURDIR()+JUSTSTEM(fln)+'.zip')
fln = SYS(5)+CURDIR()+JUSTSTEM(fln)+'.zip'
m.i = SYS(5)+CURDIR()
SET STEP ON

Do While Not Empty(fln)
For Each ofile In m.o.NameSpace(fln).Items
*** m.o.NameSpace(fln).Items.count = 0 !

If 'daily'$ofile.Name Or 'station'$ofile.Name
m.o.NameSpace(m.i).CopyHere(ofile, 256)
Endif
fln = SYS(5)+CURDIR()+Sys(2000,'*.zip',1)
RENAME (fln) TO (SYS(5)+CURDIR()+JUSTSTEM(fln)+'.zip')
fln = SYS(5)+CURDIR()+JUSTSTEM(fln)+'.zip'
Enddo
Ratings: 0 negative/0 positive
Re: Групповая распаковка по маске
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
gz это не zip архив ни разу. И, скорее всего, там внутри лежит tar файл (gzip не может упаковывать несколько файлов в один архив, потому сначала нужные файлы сцепляют при помощи утилиты tar - стандартный приём для unix-подобных систем).

7z может при помощи пайплайна обработать оба формата - и упаковщик gzip и "соединитель" файлов tar.

что-то наподобии

7z e -tgzip -so some.tar.gz | 7z e -si -ttar -oD:\MyOutputFolder *daily* -r


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Групповая распаковка по маске
boba
Автор

Сообщений: 6269
Откуда: Медвежьи озера-
Дата регистрации: 26.03.2001
Игорь
Сделано прямо наоборот
имяю.tar.gz
Про Линукс я в курсе,
в конце 80 начале 90 х
много там чего писал, и на c-shell
даже прототип того, что сейчас зовется вэб сервисом.
И конвейеры программами писал.
Нет у меня этого сейчас.
Ratings: 0 negative/0 positive
Re: Групповая распаковка по маске
sphinx

Сообщений: 31182
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
Цитата:
Нет у меня этого сейчас.

Володя, а нужно-то что?


------------------
"Veni, vidi, vici!"(с)
Ratings: 0 negative/0 positive
Re: Групповая распаковка по маске
boba
Автор

Сообщений: 6269
Откуда: Медвежьи озера-
Дата регистрации: 26.03.2001
Есть сотни две архивов, некоторые zip (решено
с вашей помощь), и tar.gz
Нужно написать конвейер , достающий из архива
только нужные по маске имени файлы.
После каждой конвертации
каждый файл импортировать в dbf
Ratings: 0 negative/0 positive
Re: Групповая распаковка по маске
boba
Автор

Сообщений: 6269
Откуда: Медвежьи озера-
Дата регистрации: 26.03.2001
Запуск tar все решил
tar -xvzf d:\tilt\B201.202100100Tilt.tgz -C D:\MyOutputFolder
Ratings: 0 negative/0 positive


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

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

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