Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 24.06.2013, 11:48
demon-sheff demon-sheff вне форума
Прохожий
 
Регистрация: 24.06.2013
Сообщения: 29
Версия Delphi: Delphi 7
Репутация: 10
Печаль Файл + архив

Доброго времени суток. Уважаемые профессионалы, подскажите пожалуйста как можно реализовать следующее: у меня есть папка куда скидываются xml файлы и архивы с ними. Я уже реализовал поиск файлов и отправку их в мемо. Не могу понять почему он выдает только последнее совпадение со строчкой.

делаю все так
Код:
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;
а в итоге
Ответить с цитированием
  #2  
Старый 25.06.2013, 04:54
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Каков принцип копирования этого
Код:
...
St:=Copy(Memo4.Lines.Strings[i],11,length(Memo4.Lines.Strings[i])-12);
...
и этого
Код:
...
Sa:=Copy(Memo6.Lines.Strings[j],5,length(Memo6.Lines.Strings[j])-6);
...
в смысле, как выглядит содержимое строк в мемо полностью? 11 и 5 понятно, а вот 12 и 6 не совсем, зачем столько символов от конца строки вырезается при копировании, просветите пжлст. Похоже что-то или слишком мало или слишком много обрезается при этой операции.

Да и потом, вот в этом месте
Код:
...

       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);
...
происходит следующее - j не изменяется, она остаётся в значении присвоенном ей в предыдущем цикле на последней итерации, а когда прокручивается j, с i происходит тоже самое, она не изменяется, потому как вот
Код:
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;{if}

     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; {if}
      end; {for j}
    end; {for i}

//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;
отсюда и совпадение только в конце. Нужно ещё пару циклов добавить или объединить существующие.
Ответить с цитированием
  #3  
Старый 25.06.2013, 06:23
demon-sheff demon-sheff вне форума
Прохожий
 
Регистрация: 24.06.2013
Сообщения: 29
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от Alegun
Каков принцип копирования этого
Код:
...
St:=Copy(Memo4.Lines.Strings[i],11,length(Memo4.Lines.Strings[i])-12);
...
и этого
Код:
...
Sa:=Copy(Memo6.Lines.Strings[j],5,length(Memo6.Lines.Strings[j])-6);
...
в смысле, как выглядит содержимое строк в мемо полностью? 11 и 5 понятно, а вот 12 и 6 не совсем, зачем столько символов от конца строки вырезается при копировании, просветите пжлст. Похоже что-то или слишком мало или слишком много обрезается при этой операции.
в memo4 находится подгружаемый текст, такого содержания:
package_n_145114eb-a009-4774-9da4-180be513209c.xml
package_n_3812d4c1-f850-4e75-8a6a-2b8653656921.xml
package_n_83b9004c-9ad2-48e3-bee5-f86f33fcec06.xml
package_n_aa1da6fd-0a78-4b00-a9ce-001110a3c712.xml
package_n_bd6b0172-a9a6-4849-9f61-df32bca15923.xml
package_n_db29d604-164c-4af2-a9ec-dab1a1732bf9.xml
package_n_fc450acd-3bf1-4457-b372-c8fb07530265.xml
а в memo6 текст по аналогии загружаемый как и предыдущий и содржит:
req_145114eb-a009-4774-9da4-180be513209c.zip
req_aa1da6fd-0a78-4b00-a9ce-001110a3c712.zip
req_db29d604-164c-4af2-a9ec-dab1a1732bf9.zip
req_fc450acd-3bf1-4457-b372-c8fb07530265.zip

а такое маленькое количество символов из-за того, что я не знал как это все дело вывести полностью и действительно, оно мне показывает не полностью число, а только частично. Если укажите на недостаток буду только признателен.
Мне удалось решить поставленную задачу только через listbox, правда при выводе возникают дубликаты. Код выглядит примерно так
Код:
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);
      ListBox4.Items.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);
           ListBox5.Items.Add(Sa);
           end;
        end;
   end;
   begin
   for i := 0 to Listbox4.Items.Count - 1 do
   for j := 0 to Listbox5.Items.Count - 1 do
   if pos(ListBox4.Items.Strings[i],ListBox5.Items.strings[j])>0 then
   ListBox6.Items.Add(listbox5.Items.Strings[j]);
   end;
end;
Ответить с цитированием
  #4  
Старый 25.06.2013, 06:31
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

А что должно происходить на выходе, в смысле, следует отобрать имена файлов для которых есть архив или что-то другое?
Ответить с цитированием
  #5  
Старый 25.06.2013, 06:49
demon-sheff demon-sheff вне форума
Прохожий
 
Регистрация: 24.06.2013
Сообщения: 29
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

да, должно выводить xml с которыми имеется архив
Ответить с цитированием
  #6  
Старый 25.06.2013, 07:49
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Посмотрите пжлст, такое прокатит?
Ответить с цитированием
  #7  
Старый 25.06.2013, 08:25
demon-sheff demon-sheff вне форума
Прохожий
 
Регистрация: 24.06.2013
Сообщения: 29
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

работает! но вот когда делаю загрузку
Код:
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
 SR, SK, SV: TSearchRec;
 S: TStrings;
  otv:word;
 c, Dir : string;
 j,i: integer;
     st, sa:shortstring;
     FindRes, FindRez :Integer;
     sl:TStringList;
begin
    if SelectDirectory('Выберите папку', 'C:\', 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
 FindRes:=FindFirst(Dir+'\*.xml',faAnyFile,SR);
 While FindRes=0 do
       memo4.Lines.Add(SR.Name);
       FindRes:=FindNext(SR);
       end;
          FindClose(SR);
          begin
      FindRez:=FindFirst(Dir+'\*.zip',faAnyFile,SV);
 While FindRez=0 do
    begin
        memo6.Lines.Add(SV.Name);
       FindRez:=FindNext(SV);
       end;
          FindClose(SV);
           end;
           end;
end.
ругается на вот эту строчку if SelectDirectory('Выберите папку', 'C:\', Dir) then
Ответить с цитированием
  #8  
Старый 25.06.2013, 08:31
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

FileCtrl в uses подключен?
Ответить с цитированием
  #9  
Старый 25.06.2013, 09:59
demon-sheff demon-sheff вне форума
Прохожий
 
Регистрация: 24.06.2013
Сообщения: 29
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Блиин точно!!! Виноват. Моя ошибка . Не могли бы вы посмотреть кагда выбираю папку идет зацикливание и программа виснет
http://zalil.ru/34603942
Ответить с цитированием
  #10  
Старый 25.06.2013, 10:16
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Вот это в коде замените

Код:
...
 FindRes:=FindFirst(Dir+'\*.xml',faAnyFile,SR);
 While FindRes=0 do
  begin
   memo4.Lines.Add(SR.Name);
   FindRes:=FindNext(SR);
  end;
 FindClose(SR);
...

Последний раз редактировалось Alegun, 25.06.2013 в 10:34. Причина: самоцензура
Ответить с цитированием
Этот пользователь сказал Спасибо Alegun за это полезное сообщение:
demon-sheff (25.06.2013)
  #11  
Старый 25.06.2013, 10:23
demon-sheff demon-sheff вне форума
Прохожий
 
Регистрация: 24.06.2013
Сообщения: 29
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

СПАСИБО ОГРОМНОЕ!!! ЭТО ТО ЧТО НАДО!!! ВАША ПОМОЩЬ МНЕ ОЧЕНЬ ПОМОГЛА! Еще раз СПАСИБО!
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 02:12.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025