Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.06.2013, 13:34   #1
demon-sheff
Пользователь
 
Регистрация: 21.03.2013
Сообщений: 46
Печаль Файл + архив

Доброго времени суток. Уважаемые профессионалы, подскажите пожалуйста как можно реализовать следующее: у меня есть папка куда скидываются xml файлы и архивы с ними. Так вот проблема в следующем не могу разобраться как сделать проверку существования xml и zip архива.
XML называется: package_n_145114eb-a009-4774-9da4-180be513209c.xml
Zip архив соответственно: req_145114eb-a009-4774-9da4-180be513209c.zip
Буду рад любой помощи!
demon-sheff вне форума Ответить с цитированием
Старый 19.06.2013, 13:46   #2
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию

а считать расширение из имени файла.... чего мешает?
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)
BARNEY вне форума Ответить с цитированием
Старый 19.06.2013, 13:51   #3
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

1. Отсекаете расширение файла(копируем все до точки)
2. Инвертируете строку: из собака в акабос
3. Копируете все до знака _, как в п. 1
4. Инвертируете строку(она снова в читабильном виде)
В итоге получаем строку: 145114eb-a009-4774-9da4-180be513209c

Теперь такое:
Код:
myStr:='145114eb-a009-4774-9da4-180be513209c';
if (FileExists('package_n_'+myStr+'.xml') and FileExists('reg_'+myStr+'.zip')) then
<Файлы существуют>
Человек_Борща вне форума Ответить с цитированием
Старый 19.06.2013, 13:55   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
if AnsiSameText(ExtractFileExt(FileName),'.zip') then - расширение zip
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 19.06.2013, 14:07   #5
demon-sheff
Пользователь
 
Регистрация: 21.03.2013
Сообщений: 46
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
Код:
myStr:='145114eb-a009-4774-9da4-180be513209c';
if (FileExists('package_n_'+myStr+'.xml') and FileExists('reg_'+myStr+'.zip')) then
<Файлы существуют>
а как быть если название всегда разное и не повторяется. как нибудь можно сделать без присвоения myStr. просто название архива присудствует в xml
Код:
<?xml version="1.0" encoding="utf-8"?>
<RegFolder><eDocument Version="06"/>
<Info>
<GUID>145114eb-a009-4774-9da4-180be513209c</GUID>
<Type>1</Type><Sender Date="2012-06-13T18:42:13+06:00" Code="45.0.1.94"/>
<Recipient Code_OKATO="38401880000" Module_Type="3"/>
<Attach>
<Name>req_145114eb-a009-4774-9da4-180be513209c.zip</Name>
</Attach>
</Info><GUID>219ebe07-d72b-4224-8d4b-fe45542aaf30</GUID>
<Number>45-0-1-94/1001/2012-3963</Number>
<Name>Прекращение существования ОН</Name><Request>
<GUID>3e079e41-d403-41d5-9551-bb5342ed18d5</GUID>
<Type>558102020000</Type><Action>659002007000</Action>
<Number>45-45-16/309/2012-587</Number><Date>2012-06-13T17:10:12+06:00</Date>
<Date_Execution>2012-07-13</Date_Execution><Status>001</Status><Urgency>false</Urgency>
<Organization_Code>051501045000</Organization_Code><Tax_Free>true</Tax_Free><Payment_Code/>
<Executive><FIO><Surname>Иванов</Surname><First>Иван</First><Patronymic>Иванович</Patronymic>
</FIO><Appointment>Инженер 1 категории</Appointment>
</Executive><Date_Recive>2012-06-13T17:10:12</Date_Recive>
<Type_Info>111</Type_Info>
</Request></RegFolder>
demon-sheff вне форума Ответить с цитированием
Старый 19.06.2013, 14:12   #6
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Открываем XML, читаем имя архива, проверяем.
Человек_Борща вне форума Ответить с цитированием
Старый 20.06.2013, 07:57   #7
demon-sheff
Пользователь
 
Регистрация: 21.03.2013
Сообщений: 46
По умолчанию

делаю все так:
Код:
var
  SR, SK, SV: TSearchRec; // поисковая переменная
  S: TStrings;
  Dir : string;
  j,i: integer;
     FindRes, FindRez :Integer;  // переменная для записи результата поиска
begin
    if SelectDirectory('Выберите папку', 'С:\', Dir) then
   begin
      Edit1.Text := Dir;
   end;
    if FindFirst(Dir+'\*.xml',faAnyFile,SK) = 0 then
  repeat
    S:=TStringList.Create;
    S.LoadFromFile(Dir+'\'+SK.Name);
    Memo1.Text:=Memo1.Text+#13+S.Text;
    S.Free;
  until FindNext(SK) <> 0;
  FindClose(SK);
   begin
  ListBox2.Clear;
  ListBox3.Clear;
 FindRes:=FindFirst(Dir+'\*.xml',faAnyFile,SR);  // задание условий поиска и начало поиска
 While FindRes=0 do  // пока мы находим файлы (каталоги), то выполнять цикл
    begin
       ListBox2.Items.Add(SR.Name);  // добавление в список название найденного элемента
       FindRes:=FindNext(SR);  // продолжение поиска по заданным условиям
       end;
 FindClose(SR);  // закрываем поиск
          begin
      FindRez:=FindFirst(Dir+'\*.zip',faAnyFile,SV);  // задание условий поиска и начало поиска
 While FindRez=0 do  // пока мы находим файлы (каталоги), то выполнять цикл
    begin
       ListBox3.Items.Add(SV.Name);  // добавление в список название найденного элемента
       FindRez:=FindNext(SV);  // продолжение поиска по заданным условиям
       end;
 FindClose(SV);  // закрываем поиск
 end;
           begin
            if (FileExists('package_n_'+SR+'.xml') and FileExists('reg_'+SV+'.zip')) then
            Memo4.Lines.Add(SR.Name);
           end;
предпологаю что ошибка где-то здесь, но как ее решить не могу сообразить
begin
if (FileExists('package_n_'+SR+'.xml') and FileExists('reg_'+SV+'.zip')) then
Memo4.Lines.Add(SR.Name);
end;
demon-sheff вне форума Ответить с цитированием
Старый 20.06.2013, 10:59   #8
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Если имя архива есть в XML, то открываете XML читаете имя архива и проверяете.
Все.
Человек_Борща вне форума Ответить с цитированием
Старый 24.06.2013, 06:33   #9
demon-sheff
Пользователь
 
Регистрация: 21.03.2013
Сообщений: 46
По умолчанию

Сделал все так как вы и говорили, получилось так:
Код:
procedure TForm1.SpeedButton3Click(Sender: TObject);
var
 j,i:integer;
 sa,st:shortstring;
 begin
   for i:=0 to Memo4.Lines.Count-1 do begin
    if (Pos('package_n_',Memo4.Lines.Strings[i])<>0)
   then  begin
      St:=Copy(Memo4.Lines.Strings[i],11,length(Memo4.Lines.Strings[i])-12);
      Memo5.Lines.Add(st);
       end;
      for j:=0 to Memo6.Lines.Count-1 do begin
    if (Pos('req_',Memo6.Lines.Strings[j])<>0)
   then  begin
      Sa:=Copy(Memo6.Lines.Strings[j],5,length(Memo6.Lines.Strings[j])-6);
      Memo7.Lines.Add(sa);
       end;
end;
 end;
       begin
       for i := 0 to memo5.lines.Count - 1 do
         if memo5.Lines.Strings[i]=memo7.Lines.Strings[j] then
         memo8.Lines.Add(st);
         for j := 0 to memo7.Lines.Count - 1 do
           if memo7.Lines.Strings[j]=memo5.Lines.Strings[i] then
         memo8.Lines.Add(sa);
       end;
 end;
в итоге получается что он мне только 1 совподение выводит в мемо8. чего я опять тут накосячил?
demon-sheff вне форума Ответить с цитированием
Старый 24.06.2013, 10:29   #10
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Ну вы же сами сказали, что имена архивов находятся в XML, почему не читаете имена архивов оттуда?
Человек_Борща вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
файл в готовый архив corsar1991 Общие вопросы Delphi 3 09.11.2012 22:01
Добавить файл в архив Aleksandr Общие вопросы Delphi 9 24.06.2012 12:34
Как добавить файл уже в существующий архив (SevenZipVCL) DarkHacker Компоненты Delphi 1 01.11.2011 23:14
Добавить файл в jar архив Shouldercannon Общие вопросы Delphi 1 13.03.2011 21:03
Архив xakkkkker Общие вопросы Delphi 4 04.01.2010 18:49