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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.07.2011, 12:21   #1
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию [Орешек] Обновления истории найденных на ПК файлов... 2 строки 2 одинаковых имени файла но разные пути...

Доброго времени суток!

Опишу проблему:
Есть 2 списка строк.
aOut - Список файлов которые когда-либо ранее были найдены на ПК
aIn - список строк с файлами которые только что найдены на ПК.
Задачка состоит в том чтобы обновлять HistoryPCFiles из FoundFilesList.

Вот как я это сделал:
Код:
procedure PPSFH(aIn, aOut: TStrings);
var
  i: integer;
  i2: integer;
  add: boolean;
  aNewFileName, aNewFilePath: string;
  aOldFileName, aOldFilePath: string;
begin
  //Цикл по списку foundFiles
  for i := to aIn.Count - 1 do
  begin
    //Изначалольно флаг "добавить" true
    add := True;
    //извлекаем имя и путь нового файла
    aNewFileName := UpperCase(ExtractFileName(aIn.strings[i]));
    aNewFilePath := UpperCase(ExtractFilePath(aIn.strings[i]));
   //цикл по списку истории
    for i2 := 0 to aOut.Count - 1 do
    begin
     //извлекаем имя и путь
      aOldFileName := UpperCase(ExtractFileName(aOut.strings[i]));
      aOldFilePath := UpperCase(ExtractFilePath(aOut.strings[i]));
      //если имена совпадают а пути разные
      if (aNewFileName = aOldFileName) and not(aNewFilePath = aOldFilePath)  then
      begin
       //заменяем строку
        aOut.strings[i] := aNewFilePath + aNewFileName;
        //Добовлять не надо
        add := False;
 Exit;
      end;
    end;

    if add then
    begin
      aOut.add(aIn.strings[i]);
    end;
  end;
end;
в кратце, что делает этот код:
Ищет совпавшие по именам строки. НО если путь разный, то он записывает новый путь.


Этот код работает только в том случае, если в aOut есть всего одна строка такого плана:
aIn - e:\games\File1.txt
aOut - c:\games\File1.txt

код приведёт это к виду:
aIn - e:\games\File1.txt
aOut - e:\games\File1.txt


Но я не знаю что делать в случае если ситуация становится такой:
aIn - e:\games\File1.txt

aOut - c:\games\File1.txt
c:\File1.txt

Файлы одинаковые по имени.
Но место нахождение у них разное.

по этому код приведёт все в такой вид:
aOut - e:\games\File1.txt
e:\games\File1.txt

Как поступить?

Последний раз редактировалось Человек_Борща; 03.07.2011 в 12:24.
Человек_Борща вне форума Ответить с цитированием
Старый 03.07.2011, 13:18   #2
ex.cluz
Участник клуба
 
Аватар для ex.cluz
 
Регистрация: 15.01.2010
Сообщений: 1,325
По умолчанию

Цитата:
по этому код приведёт все в такой вид:
aOut - e:\games\File1.txt
e:\games\File1.txt
А что должно получится по условию задачи?

На вскидку - можно считать слэши. Если равно их количество (и в In и в Out), то приводить к новому виду. Не?


Добавлено:
А можно сделать массивы 2-х мерными и помимо строк хранить контрольную сумму. Алгоритм чуть медленнее работать будет, но сравнение будет однозначным, даже если пути совсем разные.
Грибы - они разные. Один тебя накормит, другой тебе кино покажет...
Редактор журнала "
[ПРОграммист]"
Yan's Home Digital Lab

Последний раз редактировалось ex.cluz; 03.07.2011 в 13:32.
ex.cluz вне форума Ответить с цитированием
Старый 03.07.2011, 14:31   #3
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Вариант в md5 как 3 идентификатор это вариант=) Пойду попробую..

хатя нет. Не имеет смысла.
Почему?

Потому что, оба файла будут обновлены, и их новый хешь будет одинаков(такой же как у файла с сервера).
Получается хеши одинаковы, имена одинаковы, но пути разные. Или имя одинаковое, пути разные, md5 разный.

Придётся отказаться от истории...

Последний раз редактировалось Человек_Борща; 03.07.2011 в 14:44.
Человек_Борща вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление найденных файлов SnowSin Помощь студентам 1 23.04.2011 14:37
Передача пути и имени файла Miha85193 Общие вопросы Delphi 13 07.07.2010 15:02
Поиск одинаковых значений в стобце, возврат суммы чисел из другого столбца в найденных строках! Kup Microsoft Office Excel 2 25.03.2010 10:15
Проверка закачиваемых файлов по дате обновления Evgen1976 Работа с сетью в Delphi 2 19.03.2009 13:02
Нужна помощь: выбор файлов исходя из имени файлов Antik163RUS Помощь студентам 4 19.06.2008 21:20