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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 27.12.2013, 00:06   #1
Fahman
Форумчанин
 
Аватар для Fahman
 
Регистрация: 03.04.2013
Сообщений: 703
По умолчанию OpenDialog

Можно ли так сделать:

Открыть .txt через OpenDialog удалить в нем дубликаты, и показать сообщение сколько было удалено дубликатов, и сохранить результат в тот же txt?
99% ошибок компьютера сидит в полуметре от монитора.
Fahman вне форума
Старый 27.12.2013, 00:08   #2
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

через OpenDialog ничего открыть нельзя, следовательно задача не имеет решения
eval вне форума
Старый 27.12.2013, 00:15   #3
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

OpenDialog нужен лишь для того, чтобы выбрать имя файла в привычном для пользователей Windows диалоговом окне. И все.
А дальше с этим именем файла OpenDialog.FileName делайте что хотите.
То есть задача решается, независимо от того, пользоваться OpenDialog, или нет.
type_Oleg вне форума
Старый 27.12.2013, 00:26   #4
Fahman
Форумчанин
 
Аватар для Fahman
 
Регистрация: 03.04.2013
Сообщений: 703
По умолчанию

Ну а примерчик может кто дать?
99% ошибок компьютера сидит в полуметре от монитора.
Fahman вне форума
Старый 27.12.2013, 00:30   #5
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Код:
if not opendialog1.execute then exit;
form1.caption:=opendialog1.filename;
В заголовке формы появится путь к выбранному через Topendialog файлу) а если файл не выбран, то ничего не появится
from dark to light)
Алексей_2012 вне форума
Старый 27.12.2013, 04:52   #6
alextrof94
Форумчанин
 
Регистрация: 16.03.2013
Сообщений: 599
По умолчанию

Код:
var 
  MyStringList: TStringList;
  i, j, c: integer;
begin
 FileName:='';
 c:=0;
 OpenDialog1.execute;
 if OpenDialog1.filename<>'' then
 begin
  MyStringList:=TStringList.Create;
  MyStringList.LoadFromFile(OpenDialog1.filename);
  for i:=MyStringList.Count-1 downto 0 do
   for j:=MyStringList.Count-1 downto i+1 do
    if MyStringList[i]=MyStringList[j] then
    begin
     MyStringList.delete(j);
     inc(c);
    end;
  MyStringList.SaveToFile(OpenDialog1.filename);
  MyStringList.Free;
 end;
end;
UPD: код работает только с дублирующимися строками...
alextrof94$gmail.com
alextrof94 вне форума
Старый 27.12.2013, 09:38   #7
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

alextrof94, вам почитать надобно про TStringList, и в частности про свойство Duplicates, прежде чем писать непойми что
eval вне форума
Старый 27.12.2013, 11:17   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от eval Посмотреть сообщение
alextrof94, вам почитать надобно про TStringList, и в частности про свойство Duplicates, прежде чем писать непойми что
ну, там не всё так однозначно.

цитирую Анатолия Подгорецкого (отсюда):
Цитата:
Сообщение от Anatoly Podgoretsky
Вот же в справке четко написано
Цитата:
Note: Duplicates does nothing if the list is not sorted.
поэтому, если допустимо изменение порядка элементов в файле, задача может быть решена максимально эффективно, в пару строчек:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var ts : TStringList;
begin
  if OpenDialog1.Execute then begin
    ts := TStringList.Create;
    try
      ts.Duplicates := dupIgnore;
      ts.Sorted := true;
      ts.LoadFromFile(OpenDialog1.FileName);
      Memo1.Lines.Text := ts.Text;  // для отладки выведем текст в мемо...
    finally
      ts.Free;
    end;
  end;
end;
если же сортировку списка включать нельзя, тогда сложнее.
но я бы всё равно сделал поиск дубликатов через IndexOf()
Serge_Bliznykov вне форума
Старый 27.12.2013, 11:40   #9
Fahman
Форумчанин
 
Аватар для Fahman
 
Регистрация: 03.04.2013
Сообщений: 703
По умолчанию

Цитата:
Сообщение от alextrof94 Посмотреть сообщение
Код:
var 
  MyStringList: TStringList;
  i, j, c: integer;
begin
 FileName:='';
 c:=0;
 OpenDialog1.execute;
 if OpenDialog1.filename<>'' then
 begin
  MyStringList:=TStringList.Create;
  MyStringList.LoadFromFile(OpenDialog1.filename);
  for i:=MyStringList.Count-1 downto 0 do
   for j:=MyStringList.Count-1 downto i+1 do
    if MyStringList[i]=MyStringList[j] then
    begin
     MyStringList.delete(j);
     inc(c);
    end;
  MyStringList.SaveToFile(OpenDialog1.filename);
  MyStringList.Free;
 end;
end;
UPD: код работает только с дублирующимися строками...
Вроде работает, а как вывести результат сколько удалено строк?
99% ошибок компьютера сидит в полуметре от монитора.
Fahman вне форума
Старый 27.12.2013, 12:11   #10
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

арифметика - вычитание, с = а-в
eval вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
OpenDialog NitroSki Компоненты Delphi 4 08.06.2011 08:52
OpenDialog Cabyrc БД в Delphi 4 05.04.2009 11:56
opendialog blackstersl Общие вопросы Delphi 4 18.09.2008 15:21
opendialog blackstersl Общие вопросы Delphi 1 11.09.2008 18:23
OpenDialog.Options:=OpenDialog.Options+[ofAllowMultiSelect]; necky Компоненты Delphi 2 11.08.2007 12:53