Форум программистов, компьютерный форум, киберфорум
Наши страницы

Delphi для начинающих

Войти
Регистрация
Восстановить пароль
 
 
N_A07
0 / 0 / 0
Регистрация: 21.06.2013
Сообщений: 13
#1

Шикарное сохранение из StringGrid - Delphi

21.06.2013, 08:54. Просмотров 1065. Ответов 17
Метки нет (Все метки)

Есть задача организовать банальный сейв из таблицы СтрингГрида, вот код:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
begin
SaveDialog1.Title := 'Обзывай @ Схороняй';
SaveDialog1.Filter := 'Текстовый файл|*.txt';
SaveDialog1.DefaultExt := 'txt';
  LastRow := StringGrid2.RowCount - 1;
  for i := 0 to LastRow do
    Memo1.Lines.Add(StringGrid2.Rows[i].CommaText);
    with SaveDialog1, Memo1 do
      if Execute then
        begin
           Lines.SaveToFile(FileName);
           OpenDialog1.FileName:=FileName; // Чтобы текст не затёр источник
           if FileExists(FileName) then else Exit;
  begin
    Res := MessageDlg('Файл с таким именем уже существует. Схороняем?',
     mtConfirmation, [mbYes, mbNo], 0);
    if Res <> mrYes then Exit;
   end;
 
        end;
end;
Как не бился, не выходит. Сам процесс сохранения идёт отлично, но ни как не заставить нормально реагировать на одинаковые имена файлов, т.е. сейчас по факту, программа ВСЕГДА выдаёт сообщение "такой файл уже существует" и в любом случае сохраняет файл, даже при нажатии кнопки отмена. Подскажите пожалуйста в чём загвоздка?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.06.2013, 08:54
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Шикарное сохранение из StringGrid (Delphi):

Сохранение StringGrid - Delphi
Как сохранить данные из StringGrid в текстовый файл? -------------------------------------- И потом если что как вывести?

Сохранение StringGrid в MS Excel - Delphi
Здраствуйте. Имеется функция сохранения StringGrid в MS Excel. Работает, все хорошо, но хотел бы в ней разобраться. Может кто нибудь...

Сохранение данных из StringGrid - Delphi
Здравствуйте, подскажите пожалуйста.. Можно ли сохранить данные определенного столбца (массив) из StringGrid в текстовый файл?

StringGrid сохранение и загрузка - Delphi
Мне нужно сохранять и загружать таблицу. количество строк и столбцов можеть изменяться. Сделать нужно с помощью TIni... помогите код...

Сохранение StringGrid в файл - Delphi
Необходимо сохранить данные из StringGrid в файл - каждая ячейка - с новой строки. 1) - Ключ (серийный номер) 2) - E-mail...

Временное сохранение stringgrid - Delphi
Есть форма 1. На ней выполняются операции. Есть форма 2, которая берёт данные из формы 1 и выводит их в stringgrid По нажатию кнопки на...

17
droider
Delphist, DataBase Dev
4174 / 2258 / 458
Регистрация: 04.10.2012
Сообщений: 8,094
21.06.2013, 09:22 #2
Цитата Сообщение от N_A07 Посмотреть сообщение
if FileExists(FileName) then else Exit;
нелогичная конструкция
Попробуйте так
Delphi
1
2
3
4
5
6
7
8
9
10
11
..........................
..........................
if FileExists(FileName) then
begin
if MessageDlg('Файл с таким именем уже существует. Схороняем?', mtConfirmation, [mbYes, mbNo], 0)<>mrYes
then Exit;
end
else
begin
Lines.SaveToFile(FileName);
end;
0
N_A07
0 / 0 / 0
Регистрация: 21.06.2013
Сообщений: 13
21.06.2013, 10:19  [ТС] #3
droider, попробовал, так гораздо лучше, но теперь при совпадении имён файлов при нажатии "yes" файл не пересохраняется, а при "no" не выводит вновь окно сохранения.
Понимаю что туплю, но опять как не крутил - не выходит как нужно.
0
droider
Delphist, DataBase Dev
4174 / 2258 / 458
Регистрация: 04.10.2012
Сообщений: 8,094
21.06.2013, 10:22 #4
@N_A07, скинь проект.
0
N_A07
0 / 0 / 0
Регистрация: 21.06.2013
Сообщений: 13
21.06.2013, 11:42  [ТС] #5
Загрузил.
02.rar
0
droider
Delphist, DataBase Dev
4174 / 2258 / 458
Регистрация: 04.10.2012
Сообщений: 8,094
21.06.2013, 15:33 #6
@N_A07,
а можно увидеть файл, который обрабатывается в программе?
0
N_A07
0 / 0 / 0
Регистрация: 21.06.2013
Сообщений: 13
21.06.2013, 16:56  [ТС] #7
Файл - любой *.txt вида:
1234 1234 1234
4321 4321 421
12.4 12.3 12.4
321 123 321
и т.д.
Я ещё не прописал саму функцию обработки, там формулы будут, поэтому файл тут не важен. Сейчас речь только о грамотном сохранении файла
0
N_A07
0 / 0 / 0
Регистрация: 21.06.2013
Сообщений: 13
24.06.2013, 10:37  [ТС] #8
Разобрался с сохранением:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
procedure TForm1.Button3Click(Sender: TObject);
begin
SaveDialog1.Title := 'Обзывай @ Схороняй';
SaveDialog1.Filter := 'Текстовый файл|*.txt';
SaveDialog1.DefaultExt := 'txt';
  LastRow := StringGrid2.RowCount - 1;
  for i := 0 to LastRow do
    Memo1.Lines.Add(StringGrid2.Rows[i].CommaText);
    with SaveDialog1, Memo1 do
      if Execute then
        begin
           OpenDialog1.FileName:=FileName; // Чтобы исправленный текст не затер источник
           if FileExists(FileName) then
 begin
     Res := MessageDlg('Файл с таким именем уже существует. Всё равно схороняем?',
     mtConfirmation, [mbYes, mbNo], 0);
      if Res = mrYes then Lines.SaveToFile(FileName) else Exit;
 end
else
 begin
 Lines.SaveToFile(FileName);
 end;
        end;
end;
Остался недоработанным такой момент: при нажатии кнопки "No", закрывается окно сохранения. Если в
if Res = mrYes then Lines.SaveToFile(FileName) else Exit;
менять Exit на OpenDialog, то при нажатии "No" и повторной попытке сохранить файл с одинаковым именем, он сразу сохраняет, уже не выводя окно с предупреждением.
Помогите пожалуйста разобраться.
0
N_A07
0 / 0 / 0
Регистрация: 21.06.2013
Сообщений: 13
28.06.2013, 08:45  [ТС] #9
Выложу, пожалуй, сюда конечный, эталонный результат. Надуюсь кому-нибудь в будущем пригодится.

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
procedure TForm1.Button3Click(Sender: TObject);
label
 goto1, goto2;
begin
goto2:
SaveDialog1.Title := 'Обзывай @ Схороняй';
SaveDialog1.Filter := 'Текстовый файл|*.txt';
SaveDialog1.DefaultExt := 'txt';
  LastRow := StringGrid2.RowCount - 1;
  for i := 0 to LastRow do
    Memo1.Lines.Add(StringGrid2.Rows[i].CommaText);
    with SaveDialog1, Memo1 do
      if Execute then
        begin
           OpenDialog1.FileName:=FileName; // Чтобы исправленный текст не затёр источник
           if FileExists(FileName) then
 begin
     Res := MessageDlg('Файл с таким именем уже существует. Всё равно схороняем?',
     mtConfirmation, [mbYes, mbNo], 0);
      if Res = mrYes then goto goto1 else goto goto2;
goto1:
      Lines.SaveToFile(FileName)
 end
else
 begin
 Lines.SaveToFile(FileName);
 end;
        end;
end;
Тему можно закрывать.
0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
24020 / 16001 / 4842
Регистрация: 22.10.2011
Сообщений: 28,321
Записей в блоге: 5
28.06.2013, 12:06 #10
Цитата Сообщение от N_A07 Посмотреть сообщение
эталонный результат
никак не вяжется с использованием goto... Это код, наляпанный на коленке, чтобы побыстрее сдать, отвязаться от препода, и пойти дальше в клуб, гулять до следующей сессии, а не эталон...
0
N_A07
0 / 0 / 0
Регистрация: 21.06.2013
Сообщений: 13
28.06.2013, 13:20  [ТС] #11
никак не вяжется с использованием goto... Это код, наляпанный на коленке, чтобы побыстрее сдать, отвязаться от препода, и пойти дальше в клуб, гулять до следующей сессии, а не эталон...
Со времён студенческой скамьи, никто мне так и не смог внятно, разумно объяснить, чем же goto так плох? "Он плох - потому что плох".
Возможно UI, вы сможете?
0
droider
Delphist, DataBase Dev
4174 / 2258 / 458
Регистрация: 04.10.2012
Сообщений: 8,094
29.06.2013, 00:15 #12
@N_A07, действительно, к чему здесь метки? И переменная Res тоже необязательна.
Цитата Сообщение от N_A07 Посмотреть сообщение
никто мне так и не смог внятно, разумно объяснить, чем же goto так плох?
это секрет
0
N_A07
0 / 0 / 0
Регистрация: 21.06.2013
Сообщений: 13
01.07.2013, 08:51  [ТС] #13
Оркомя того что:
Оператор go to сам по себе просто слишком примитивен
никаких нормальных объяснений. Опять же весь смысл сводится:
- Не вздумай использовать "гоуту", @&%$#, если хочешь быть крутым программистом!
-- Но почему?
- Потому что: нефиг, не кошерно, не труЪ, гладиолус, я так сказал! (нужное подчеркнуть).

Подскажите пожалуйста как реализовать по другому, более правильно по вашему мнению, я буду очень признателен.
0
FIL
Модератор
3375 / 2513 / 478
Регистрация: 19.09.2012
Сообщений: 7,845
01.07.2013, 09:35 #14
Например так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
procedure TForm1.Button1Click(Sender: TObject);
var
  i, Res: Integer;
begin
  // Г*Г*ñòðîéêè SaveDialog1 ìîæГ*Г® ГўГ»Г*ГҐГ±ГІГЁ Гў FormCreate или в дизайнере прописАть
  SaveDialog1.Title := 'ÎáçûâГ*Г© @ ÑõîðîГ*ГїГ©';
  SaveDialog1.Filter := 'Òåêñòîâûé ГґГ*éë|*.txt';
  SaveDialog1.DefaultExt := 'txt';
 
  Res := mrNo;
  while Res <> mrYes do
    if SaveDialog1.Execute then
      if FileExists(SaveDialog1.FileName) then
        Res := MessageDlg('Г”Г*éë Г± ГІГ*ГЄГЁГ¬ èìåГ*ГҐГ¬ óæå Г±ГіГ№ГҐГ±ГІГўГіГҐГІ. Âñ¸ Г°Г*ГўГ*Г® ñõîðîГ*ГїГҐГ¬?',
          mtConfirmation, [mbYes, mbNo], 0)
      else
        Break
    else
      Exit;
 
  Memo1.Clear;
  for i := 0 to StringGrid2.RowCount - 1 do
    Memo1.Lines.Add(StringGrid2.Rows[i].CommaText);
  Memo1.Lines.SaveToFile(SaveDialog1.FileName);
  OpenDialog1.FileName := SaveDialog1.FileName;
end;
1
N_A07
0 / 0 / 0
Регистрация: 21.06.2013
Сообщений: 13
01.07.2013, 15:50  [ТС] #15
Так тоже вариант Спасибо.
0
01.07.2013, 15:50
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.07.2013, 15:50
Привет! Вот еще темы с ответами:

Сохранение StringGrid в Word - Delphi
Иногда не всё выводит,ошибки вылазиют в чем дело? procedure TForm1.N1Click(Sender: TObject); var i,j:Integer; begin try ...

Сохранение Stringgrid c ColorBOX - Delphi
Вот изрядно мучался (4 дня) с этим Stringgrid и ColorBox. У меня на Stringgrid можно рисовать, но не возможно сохранить цвета. Цвета мне...

StringGrid Сохранение и открытие - Delphi
Помогите пожалуйста пытаюсь сохранить стрингрид в текстовый файл procedure TForm2.Button2Click(Sender: TObject); var K:TextFile; ...

Автоматическое сохранение stringgrid - Delphi
Доброго времени друзья, не могли бы вы подсказать возможно ли то, что меня интересует. У меня есть программа, которая состоит из...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru