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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.03.2015, 22:15   #1
SolovejK
Пользователь
 
Регистрация: 27.01.2010
Сообщений: 52
По умолчанию Удаление дубликатов

Здравствуйте!

В папке имеется куча файлов типа 1_22222_33333.ttt (естественно цифры разные). Там где находится "22222" цифры могут повторятся. Необходимо дубликаты (только там где "22222") переместить в др. папку.

Сделал так:
Код:
procedure TForm1.btn1Click(Sender: TObject);
var
  str : string;
  sr : TSearchRec;
  FindRes, p : Integer;
  Buf : TStringList;
begin
  Buf := TStringList.Create;
  FindRes := FindFirst(ExtractFilePath(Application.ExeName) +'\All\'+ '*.ttt',faAnyFile,sr); // задание условий поиска и начало поиска
  While FindRes = 0 do
    begin
      str:=sr.Name;
      p:=pos('_',str); //находим в наименовании файла индекс символа '_'
      delete(str,1,p); //удаляем в наименовании файла символы с первого до найденного индекса
      Delete(Str,Pos('_',Str),Length(Str)); //удаляем все символы после '_'
      if Buf.Duplicates = dupError then
      MoveFile(PWideChar(ExtractFilePath(Application.ExeName) +'\All\'+ sr.Name), PWideChar(ExtractFilePath(Application.ExeName) +'\ttt\'+ sr.Name))
      else Buf.Add(str);
      ListBox1.Items.Add(str);
      FindRes:=FindNext(sr);
    end;
  ListBox1.Items.Assign(Buf);
  Buf.Free;
  Label1.Caption := 'Загружено: ' + IntToStr(ListBox1.Items.Capacity);
end;
Все равно добавляет в Listbox все подряд.
Помогите исправить или предложите др. вариант.
SolovejK вне форума Ответить с цитированием
Старый 12.03.2015, 04:02   #2
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,656
По умолчанию

Цитата:
Все равно добавляет в Listbox все подряд.
так и быть должно. ветвления-то нету:
Код:
ListBox1.Items.Add(str);
Цитата:
предложите др. вариант.
не мешай в кучу поиск и перемещение, выполняй их последовательно.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 12.03.2015, 06:19   #3
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

Код:
procedure TForm1.btn1Click(Sender: TObject);
var
  Buf : TStringList;
  str : string;
  sr : TSearchRec;
  FindRes: Integer;
begin
  Buf := TStringList.Create;
  try
    Buf.CaseSensitive:=False;
    Buf.Sorted:=True;
    FindRes := FindFirst(ExtractFilePath(Application.ExeName) +'\All\'+ '*.ttt',faAnyFile,sr); // задание условий поиска и начало поиска
    While FindRes = 0 do
    begin
      str:=sr.Name;
      delete(str,1,pos('_',str));Delete(Str,Pos('_',Str),Length(Str));

      if Buf.IndexOf(Str)>0 then
        MoveFile(PChar(ExtractFilePath(Application.ExeName) +'\All\'+ sr.Name), PChar(ExtractFilePath(Application.ExeName) +'\ttt\'+ sr.Name))
      else
        Buf.Add(str);
      FindRes:=FindNext(sr);
    end;
    ListBox1.Items.Assign(Buf);
  finally
    Buf.Free;
  end;
  Label1.Caption := 'Загружено: ' + IntToStr(ListBox1.Items.Count);
end;
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Старый 12.03.2015, 21:19   #4
SolovejK
Пользователь
 
Регистрация: 27.01.2010
Сообщений: 52
По умолчанию

спс что подправили код, плюсанул.
Но почему-то условие
Код:
if Buf.IndexOf(Str)>0 then
не выполняется и соответственно ничего не перемещается. Хотя одинаковые файлы есть.

Я не пойму как сортировка влияет на удаление дубликатов?
если выключить строку,
Код:
Buf.Sorted:=True;
то работает так, как было у меня изначально (добавляет все подряд). Включаешь - дубликатов нет.
SolovejK вне форума Ответить с цитированием
Старый 13.03.2015, 01:35   #5
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,656
По умолчанию

Код:
if Buf.IndexOf(Str) <> -1 then // так попробуй
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 13.03.2015, 23:00   #6
SolovejK
Пользователь
 
Регистрация: 27.01.2010
Сообщений: 52
По умолчанию

Глюк с сортировкой пропал, но перемещение файлов все равно не происходит
SolovejK вне форума Ответить с цитированием
Старый 13.03.2015, 23:13   #7
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,656
По умолчанию

Цитата:
Сообщение от SolovejK Посмотреть сообщение
Глюк с сортировкой пропал, но перемещение файлов все равно не происходит
MoveFile() - это функция. какой результат она возвращает? чему равны значения переменных, которые ей передаются в качестве параметров?
мне не нужна эта инфа, она нужна тебе!
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 13.03.2015, 23:31   #8
SolovejK
Пользователь
 
Регистрация: 27.01.2010
Сообщений: 52
По умолчанию

Проблема решена, использовал функцию deletefile() вместо movefile()
SolovejK вне форума Ответить с цитированием
Ответ


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

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление дубликатов с ListBox celovec Общие вопросы Delphi 7 13.09.2016 09:07
Удаление дубликатов Wind-up Bird Microsoft Office Excel 9 02.02.2012 12:49
Удаление дубликатов строк hon Паскаль, Turbo Pascal, PascalABC.NET 10 02.08.2011 05:29
удаление дубликатов в ListView fate Общие вопросы Delphi 8 12.05.2011 16:51
Удаление дубликатов Deltist Microsoft Office Excel 11 14.01.2011 16:01