Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Удаление непарных файлов с увеличением номера и отправка

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2

Открыть новую тему     Написать ответ в эту тему

AlexSUNder

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
В директорий IN приходят файлы вида:
otk4_25_2013-05-23-16-18-27.rar
otk11s1_69_2013-05-24-15-14-51.rar
otk14_74,75_2013-05-24-16-05-30.rar
 
Они обрабатываются программой и выдаются в папку OUT виде:
at_totk10_2013-05-27-09-18-47.rar
 
Входящему otk10s3_78_2013-05-23-15-12-51.rar соответствует выходящий ast_totk10_2013-05-24-09-18-47.rar
 
Но !!! Входящих файлов может быть меньше чем обработанных - обработка выдаёт количество файлов в соответствии со внутренним общим числом. Просто в каких то выходящих файлах после обработки старая информация.
 
Нужно удалить непарные в выходящих файлах, т.е те, которым не было соответствия во входящих файлах. Т.е. если не было otk10s3_78_2013-05-23-15-12-51.rar то надо удалить в обработанных ast_totk10_2013-05-24-09-18-47.rar
 
Здесь при отборе нужно учесть только часть имени - во входящих и исходящих учесть часть букв и цифр, т.е. у файла otk10s3_78_2013-05-23-15-12-51.rar надо учитывать только otk10, а у выходящего ast_totk10_2013-05-24-09-18-47.rar только totk10 и т.д. Остальная часть наименования неважна.
 
Далее, оставшиеся файлы отправляются вложениями по почте. Каждому файлу соответствует свой мейл и единая тема у всех.

Всего записей: 92 | Зарегистр. 24-04-2009 | Отправлено: 12:14 29-05-2013
miwa

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AlexSUNder
Ну а в чем проблема? Программа не может отдельно писать, какому входящему файлу какой исходящий соответствует, а потом удалять файлы без соответствий? Писать можно во временной файл, в базу данных (если она испольузется), или вообще в памяти список хранить (хотя я бы так не делал). Удаляется файл функцией DeleteFile(Filename) или ей подобной, в зависимости от используемого языка программирования.

Всего записей: 455 | Зарегистр. 10-10-2004 | Отправлено: 13:47 29-05-2013
AlexSUNder

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Программа не может отдельно писать

Не может. В том то и вопрос. Если входящий файл отсутствует программа просто выводит файл со старыми данными.
 

Цитата:
Писать можно во ....  

Я это всё понимаю. Но мне нужен конкретный файл, а не теория.....

Всего записей: 92 | Зарегистр. 24-04-2009 | Отправлено: 23:53 29-05-2013
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Сканирование каталога FindFirst, FindNext. Сканируем исходящий каталог, нашли первый файл, функциями Pos, Delete, посимвольным сканированием находим нужную часть. Сканируем входящий каталог, пытаемся теми же методами получить эту же часть. Нашли - отлично, отправляем исходящий файл, удаляем входящий и исходящий. Повторяем пока есть файлы в исходящем каталоге.

----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 03:53 30-05-2013
miwa

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Не может. В том то и вопрос. Если входящий файл отсутствует программа просто выводит файл со старыми данными.  

А научить? В смысле дописать программу таким образом, чтобы она работала более адекватно? Ну а если невозможно, тогда - как сказал ShIvADeSt - FindFirst, Pos, Copy.
Проблема-то в чем? Для тебя готовый код написать надо?

Всего записей: 455 | Зарегистр. 10-10-2004 | Отправлено: 12:25 30-05-2013
AlexSUNder

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
miwa
 

Цитата:
дописать программу
- нереально.
 

Цитата:
готовый код написать надо
- да

Всего записей: 92 | Зарегистр. 24-04-2009 | Отправлено: 14:21 30-05-2013
miwa

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AlexSUNder
Программиста поискать не пытались?
 
Вот, с коленки, не тестирован
 

Всего записей: 455 | Зарегистр. 10-10-2004 | Отправлено: 14:37 30-05-2013
AlexSUNder

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Вот, с коленки, не тестирован
- ???

Всего записей: 92 | Зарегистр. 24-04-2009 | Отправлено: 14:38 30-05-2013
miwa

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Блин, «Ентер» случайно зацепил
 
Вот нетестированный вариант решения на паскале. str1 и str2 заполнять по вкусу.
 

Код:
var fs: TSearchRec;
  fs2: TSearchRec;
  str1, str2: string;
begin
  str1 := 'otk10';
  str2 := 'totk10';
  if FindFirst('d:\out\*.*', faAnyFile and not faDirectory, fs) = 0 then
  repeat
    if (pos(str1, fs.Name) > 0)
      then begin
        if (FindFirst('d:\in\' + str2 + '*.*'), faAnyFile, fs2) <> 0)
          then DeleteFile(fs.Name);
        FindClose(fs2);
      end;
  until FindNext(fs) <> 0;
  FindClose(fs);
end;

Всего записей: 455 | Зарегистр. 10-10-2004 | Отправлено: 14:58 30-05-2013
AlexSUNder

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
miwa
 
Мда, теперь знаю к чему может привести плохое техзадание.....
 
Мне нужно сделать БАТничек, а не на Pascal, VB, и других языках программирования. Дико извиняюсь за туманность.

Всего записей: 92 | Зарегистр. 24-04-2009 | Отправлено: 17:11 30-05-2013
miwa

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AlexSUNder

Цитата:
Мда, теперь знаю к чему может привести плохое техзадание.


 
А VBS не подойдет?

Всего записей: 455 | Зарегистр. 10-10-2004 | Отправлено: 17:44 30-05-2013
AlexSUNder

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
А VBS не подойдет?

Он бы подошёл, как и Java, но мне надо чтобы работало без установки дополнительных программ.

Всего записей: 92 | Зарегистр. 24-04-2009 | Отправлено: 22:56 30-05-2013
miwa

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AlexSUNder
VBS начиная с WinXP идет в штатной поставке вместе с системой.

Всего записей: 455 | Зарегистр. 10-10-2004 | Отправлено: 16:04 31-05-2013
AlexSUNder

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
miwa
Иду на тот форум, тоже....

Всего записей: 92 | Зарегистр. 24-04-2009 | Отправлено: 00:53 03-06-2013
Alex_Piggy

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Доброй ночи, AlexSUNder
Чистым батником и не получится. Минимум blat нужен. Лучше еще что-то вроде sed
Пробуйте. Пока только выведет имена файлов для удаления. С отправкой проблема одна - на какие адреса? Где они будут указаны?
Сохраняете как VBS, меняете папки ("D:\Test\A\Input", "D:\Test\A\Output") на Ваши и запускаете.

Код:
 
Set FSO = CreateObject("Scripting.FileSystemObject")
Set Dict = CreateObject("Scripting.Dictionary")
Set objRegExp = CreateObject("VBScript.RegExp")
Set FolderIn = FSO.GetFolder("D:\Test\A\Input")
Set FolderOut = FSO.GetFolder("D:\Test\A\Output")
 
objRegExp.Pattern = "^[^_]*_.([a-z]+[0-9]+).*"
 
For each File in FolderOut.Files
   template = objRegExp.Replace(File.name, "$1")
   Dict.Add template,File.Name
next
 
objRegExp.Pattern = "([a-z]+[0-9]+).*"
 
For each File in FolderIn.Files
  template = objRegExp.Replace(File.name, "$1")
  If Dict.Exists (template) then Dict.Remove template
next
 
for each FileName in Dict.Items
  msgbox FileName  
next
 

Всего записей: 1883 | Зарегистр. 07-08-2002 | Отправлено: 02:16 03-06-2013 | Исправлено: Alex_Piggy, 02:23 03-06-2013
AlexSUNder

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alex_Piggy
 
Спасибо за код )  Всё ЗаМечтательно ) Теперь если бы удалялись в папке "Output" те файлы, которые непарные относительно файлов в "Input".
 
Я Blat-ом и хочу. Хотя мне всё равно какой, лишь бы БЕСПЛАТНАЯ отправляла. А чем sed лучше Blat-а ?
 
 
 
"на какие адреса" - есть список адресов, привязанный к номерам выходных файлов. Т.е. исходящему файлу ast_totk14_20.rar соответствует email14_2(3......9)_qwerty@mail.com. Цифры в имени файла соответствуют цифрам в адресе. Можно исходящий файл жёстко зажать на почтовый адрес. Адреса можно указать и в текстовом файле и внутри программы.

Всего записей: 92 | Зарегистр. 24-04-2009 | Отправлено: 13:49 03-06-2013
Alex_Piggy

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Добрый день, AlexSUNder

Цитата:
А чем sed лучше Blat-а ?

Не знаю. Неправильный вопрос.

Цитата:
Хотя мне всё равно какой, лишь бы БЕСПЛАТНАЯ отправляла
...
но мне надо чтобы работало без установки дополнительных программ.

?

Цитата:
email14_2(3......9)_qwerty@mail.com
ast_totk14_20.rar
otk14_74,75_2013-05-24-16-05-30.rar
otk11s1_69_2013-05-24-15-14-51.rar

Давайте еще раз разберем имена.  
У каждого имени есть постоянная, характерная и случайная часть. - соответственно курсив, болд и подчерк.
email14_2(3......9)_qwerty@mail.com
ast_totk14_20.rar
otk14_74,75_2013-05-24-16-05-30.rar
otk11s1_69_2013-05-24-15-14-15.rar
Так верно? То есть учитываются несколько цифр (и только цифр. Буквы нельзя), идущих после otk. И если там стоит 23, то выходной файл будет попадать под шаблон "ast_totk23_*.rar", а письмо будет иметь адрес - "email23_2(3......9)_qwerty@mail.com". Верно?
Что делать с исходными файлами, для которых нет пары?
Сейчас допишу отправку по почте и дополню сообщение.
Добавлено: Подробнее...
Вам  обязательно нужно заполнить первые 6 строк своими данными. Остальное на усмотрение.
Кстати, круглые скобки недопустимы в почтовом адресе.
Сейчас - только выводит сообщения. Для того, чтобы отсылал и удалял - необходимо передвинуть одинарную кавычку (это знак комментария) из строк 52 и 59 в строки 53 и 60

Всего записей: 1883 | Зарегистр. 07-08-2002 | Отправлено: 20:04 03-06-2013 | Исправлено: Alex_Piggy, 20:57 03-06-2013
AlexSUNder

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Хотя мне всё равно какой, лишь бы БЕСПЛАТНАЯ отправляла
...
но мне надо чтобы работало без установки дополнительных программ.
 
?  

Blat  - программа бесплатная. Поэтому её и выбрал. И её не надо устанавливать.
 

Всего записей: 92 | Зарегистр. 24-04-2009 | Отправлено: 00:10 04-06-2013
Alex_Piggy

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
AlexSUNder
Батник. Использует sed (для разбора имен). ТЩАТЕЛЬНО ПРОВЕРЬТЕ НА ЛИШНИЕ ПРОБЕЛЫ В КОНЦЕ СТРОК!

Код:
 
@echo off
echo off > foundedfiles.list
echo | sed d
 
set "FolderIn=D:\Test\A\Input"
set "FolderOut=D:\Test\A\Output"
set "EmailSubj=test"
set "EmailText=test"
set "EmailSMTP=test"
set "EmailUser=test"
set "EmailPass=test"
set "EmailAdr=test"
 
 
for /f "delims=" %%i in ('dir /b "%FolderIn%"') do (
for /f "delims=" %%j in ('echo %%i ^| sed -n -e "s/otk\([0-9]\+\).*/\1/ip"') do (
(1>>foundedfiles.list echo ast_totk%%j_)    
for /f "delims=" %%k in ('dir /b "%FolderOut%\ast_totk%%j_*"') do (
blat -t "email%%j_2_qwerty@mail.com" -u "%EmailUser%" -pw "%EmailPass%" -f %EmailAdr% -s "%EmailSubj%" -body "%EmailText%" -server "%EmailSMTP%"  -attach "%FolderIn%\%%i" -attach "%FolderOut%\%%k"
)))                                                
for /f "delims=" %%l in ('dir /b "%FolderOut%" ^| findstr /b /v /g:foundedfiles.list') do del "%FolderOut%\%%l"
 

Всего записей: 1883 | Зарегистр. 07-08-2002 | Отправлено: 00:56 04-06-2013 | Исправлено: Alex_Piggy, 00:56 04-06-2013
AlexSUNder

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
У каждого имени есть постоянная, характерная и случайная часть. - соответственно курсив, болд и подчерк.
email14_2(3......9)_qwerty@mail.com
ast_totk14_20.rar
otk14_74,75_2013-05-24-16-05-30.rar
otk11s1_69_2013-05-24-15-14-15.rar
Так верно?

ДА. ВЕРНО ) Ночью не стал отвечать - после ДР начальника (круглая дата) читал письмо )
 

Цитата:
учитываются несколько цифр (и только цифр. Буквы нельзя)

Просто буквы не имеют никакого смысла и больше путают. А то что они есть, наследие одной программы, которую уже не изменить.
 

Цитата:
если там стоит 23, то выходной файл будет попадать под шаблон "ast_totk23_*.rar", а письмо будет иметь адрес - "email23_2(3......9)_qwerty@mail.com". Верно?

Верно. Адрес фиксирован относительно цифр. Т.е., например:
ast_totk23_*.rar имеет адрес email23_4_qwerty@mail.com
ast_totk47_*.rar имеет адрес email47_qwerty@mail.com
ast_totk1_*.rar имеет адрес email1_3_qwerty@mail.com
 

Цитата:
Что делать с исходными файлами, для которых нет пары?  
- ничего. Эти архивы остаются для проверки корректности пришедшей информации (если надо).

Всего записей: 92 | Зарегистр. 24-04-2009 | Отправлено: 09:35 04-06-2013
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Удаление непарных файлов с увеличением номера и отправка


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru