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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 33, средняя оценка - 4.97
Haifisch
15 / 10 / 0
Регистрация: 30.12.2010
Сообщений: 124
#1

Чтение и запись данных из множества ListBox в один файл. - Delphi

25.06.2011, 22:17. Просмотров 4630. Ответов 7
Метки нет (Все метки)

Требуется помощь.Нужно сохранить Listbox1 и Listbox2 в txt,в гугле ничего такого не нашел,на вашем форуме есть,но только с Edit и Memo.

Мне нужно чтобы это было через OpenDialog и SaveDialog.
Может у кого есть примеры
Заранее благодарен
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.06.2011, 22:17
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Чтение и запись данных из множества ListBox в один файл. (Delphi):

Запись данных из ListBox в типизированный файл - Delphi
Необходимо записать данные из списка в типизированный файл. При записи выдаёт несоответствие строковых типов. Как можно побороть проблему? ...

Сохранения в один файл содержимого из нескольких компонентов ListBox - Delphi
Привет. Задали делать программу, в которой ко всему нужно сохранять/открывать из файла то, что было зенесено в листбоксы. Как сохранять...

Запись ListBox в txt файл - Delphi
Задача простая, но я не осилю... Как записать всё с ListBox в обычный txt файл?

Open/Save Dialog. Сериализация данных. Запись/чтение данных объектов в/из потока. - Delphi
Описана файловая переменная FileOfFilms: file of TFilmArr и переменная, содержащая имя файла FileName: string, на форме присутствуют...

Запись в файл и чтение - Delphi
Подскажите как можно записывать в файл, читать (как читать в массив) если можно то с объяснениями.

Нетипизированный файл, чтение/запись - Delphi
Здравствуйте! Подскажите пожалуйста, как побайтно записать в одну строку текстового файла данные из различных компонентов на форме и...

7
Mawrat
12801 / 5709 / 675
Регистрация: 19.09.2009
Сообщений: 8,807
25.06.2011, 22:21 #2
Способ тот же:
Delphi
1
2
3
4
5
6
7
var
  Sd : TSaveDialog;
begin
  Sd := SaveDialog1;
  if not Sd.Execute then Exit;
  ListBox1.Items.SaveToFile(Sd.FileName);
end;
1
Haifisch
15 / 10 / 0
Регистрация: 30.12.2010
Сообщений: 124
25.06.2011, 22:39  [ТС] #3
спасибо,но тут возникает проблема,а как 2 сразу сохранить и еще при сохранении одного он его не сохраняет как txt,а просто неизвестный формат хотя в фильтре написано *.txt
0
Mawrat
12801 / 5709 / 675
Регистрация: 19.09.2009
Сообщений: 8,807
25.06.2011, 23:04 #4
Цитата Сообщение от Haifisch Посмотреть сообщение
и еще при сохранении одного он его не сохраняет как txt,а просто неизвестный формат хотя в фильтре написано *.txt
Фильтр отвечает лишь за показ списка файлов. Чтобы к имени фала дописывалось некоторое предопределённое расширение - надо для TSaveDialog задать это расширение в свойстве:
Delphi
1
SaveDialog1.DefaultExt := '.txt';
Это свойство можно задать через инспектор объектов.
Цитата Сообщение от Haifisch Посмотреть сообщение
но тут возникает проблема,а как 2 сразу сохранить
Предлагаю сохранять в разные файлы. Если сохранять в один файл - надо будет придумать способ, как отделить строки, предназначенные для разных ListBox.
2
Haifisch
15 / 10 / 0
Регистрация: 30.12.2010
Сообщений: 124
25.06.2011, 23:11  [ТС] #5
Спасибо,вы и так мне многое помогли,подумаю может получится,а и еще один вопрос на последок,можно код открытия в ListBox из файла
0
Mawrat
12801 / 5709 / 675
Регистрация: 19.09.2009
Сообщений: 8,807
25.06.2011, 23:56 #6
Диалоги вот так можно оформить:
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
30
31
32
33
34
35
36
37
38
39
40
41
42
//Диалог открытия файла.
procedure TForm1.Button1Click(Sender: TObject);
var
  Od : TOpenDialog;
begin
  Od := OpenDialog1;
  if Od.InitialDir = '' then
    Od.InitialDir := ExtractFilePath( ParamStr(0) )
  ;
  if not Od.Execute then Exit;
  if not FileExists(Od.FileName) then begin
    MessageDlg(
      'Файл с заданным именем не найден. Действие отменено.'
      ,mtWarning, [mbOK], 0
    );
    Exit;
  end;
 
  ListBox1.Items.LoadFromFile(Od.FileName);
end;
 
//Диалог записи в файл.
procedure TForm1.Button2Click(Sender: TObject);
var
  Sd : TSaveDialog;
  Res : Integer;
begin
  Sd := SaveDialog1;
  if Sd.InitialDir = '' then
    Sd.InitialDir := ExtractFilePath( ParamStr(0) )
  ;
  if not Sd.Execute then Exit;
  if FileExists(Sd.FileName) then begin
    Res := MessageDlg(
      'Файл с заданным именем уже существует. Перезаписать?'
      ,mtConfirmation, [mbYes, mbNo], 0
    );
    if Res = mrNo then Exit;
  end;
 
  ListBox1.Items.SaveToFile(Sd.FileName);
end;
---
Чтение и запись данных из множества ListBox в один файл.
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
//Чтение из файла.
procedure TForm1.Button1Click(Sender: TObject);
var
  F : TextFile;
  S, Name : String;
  i, Len : Integer;
  Lb : TListBox;
  Od : TOpenDialog;
begin
  Od := OpenDialog1;
  if Od.InitialDir = '' then
    Od.InitialDir := ExtractFilePath( ParamStr(0) )
  ;
  if not Od.Execute then Exit;
  if not FileExists(Od.FileName) then begin
    MessageDlg(
      'Файл с заданным именем не найден. Действие отменено.'
      ,mtWarning, [mbOK], 0
    );
    Exit;
  end;
 
  //Очистка листбоксов.
  for i := 0 to Self.ComponentCount - 1 do begin
    if not (Self.Components[i] is TListBox) then Continue;
    Lb := Self.Components[i] as TListBox;
    Lb.Clear;
  end;
 
  //Чтение строк, предназначенных для разных ListBox.
  AssignFile(F, Od.FileName);
  Reset(F);
 
  Lb := ListBox1;
  while not Eof(F) do begin
    Readln(F, S);
    //Отслеживаем строки-заголовки с информацией о том,
    //для какого ListBox предназначены строки.
    if Copy(S, 1, 10) = '----------' then begin
      Len := Length(S);
      Name := Copy(S, 11, Len - 10);
      Lb := TListBox( Self.FindComponent(Name) );
      //Пропускаем строку загловка.
      Continue;
    end;
    //Записываем данные в ListBox, только если такой ListBox существует.
    if Lb <> nil then Lb.Items.Add(S);
  end;
 
  CloseFile(F);
end;
 
//Запись в файл.
procedure TForm1.Button2Click(Sender: TObject);
var
  Sd : TSaveDialog;
  i, Res : Integer;
  S : String;
  Fs : TFileStream;
  Lb : TListBox;
begin
  Sd := SaveDialog1;
  if Sd.InitialDir = '' then
    Sd.InitialDir := ExtractFilePath( ParamStr(0) )
  ;
  if not Sd.Execute then Exit;
  if FileExists(Sd.FileName) then begin
    Res := MessageDlg(
      'Файл с заданным именем уже существует. Перезаписать?'
      ,mtConfirmation, [mbYes, mbNo], 0
    );
    if Res = mrNo then Exit;
  end;
 
  Fs := TFileStream.Create(Sd.FileName, fmCreate, fmShareDenyWrite);
  
  for i := 0 to Self.ComponentCount - 1 do begin
    if not (Self.Components[i] is TListBox) then Continue;
    Lb := Self.Components[i] as TListBox;
    //Формируем строку заголовка - помещаем в неё метку из знаков "-"
    //и сведения о том, какому ListBox будут принадлежать строки.
    S := '----------' + Lb.Name + #13#10;
    //Запись строки-заголовка.
    Fs.Write(Pointer(S)^, Length(S));
    //Запись содержимого ListBox.
    Lb.Items.SaveToStream(Fs);
  end;
  
  Fs.Free;
end;
1
Haifisch
15 / 10 / 0
Регистрация: 30.12.2010
Сообщений: 124
26.06.2011, 00:01  [ТС] #7
Большое тебе СПАСИБО!!!!
Очень тебе благодарен!!!

---
Mawrat: Пожалуйста.
0
Mawrat
12801 / 5709 / 675
Регистрация: 19.09.2009
Сообщений: 8,807
26.06.2011, 00:09 #8
Примеры:
1. Например, у нас на форме 3 ListBox. Если их сохранить в файл, то файл получится таким:
Код
----------ListBox1
LB1, Строка 1.
LB1, Строка 2.
LB1, Строка 3.
----------ListBox2
LB2, Строка 1.
LB2, Строка 2.
LB2, Строка 3.
----------ListBox3
LB3, Строка 1.
LB3, Строка 2.
LB3, Строка 3.
Теперь, если прочитать данные из этого файла - в каждый из ListBox-ов запишутся только те строки, которые для него предназначены.
---
2. Если на форме 3 ListBox, а содержимое файла такое:
Код
----------ListBox6
LB1, Строка 1.
LB1, Строка 2.
LB1, Строка 3.
----------ListBox1
LB1, Строка 1.
LB1, Строка 2.
LB1, Строка 3.
----------ListBox7
LB1, Строка 1.
LB1, Строка 2.
LB1, Строка 3.
----------ListBox2
LB2, Строка 1.
LB2, Строка 2.
LB2, Строка 3.
----------ListBox8
LB1, Строка 1.
LB1, Строка 2.
LB1, Строка 3.
----------ListBox3
LB3, Строка 1.
LB3, Строка 2.
LB3, Строка 3.
То при чтении из файла будут взяты только те строки, которые предназначены для ListBox1, ListBox2, ListBox3. Другие группы строк будут проигнорированы.
---
Может быть такая ситуация. Имеем на форме: ListBox1, ListBox2, ListBox3. А в файле такая информация:
Код
----------ListBox6
LB1, Строка 1.
LB1, Строка 2.
LB1, Строка 3.
----------ListBox1
LB1, Строка 1.
LB1, Строка 2.
LB1, Строка 3.
----------ListBox7
LB1, Строка 1.
LB1, Строка 2.
LB1, Строка 3.
----------ListBox3
LB3, Строка 1.
LB3, Строка 2.
LB3, Строка 3.
Т. е. данные для ListBox2 отсутствуют. В этом случае в LisrtBox1 и в ListBox3 будут записаны предназначенные для них строки. А ListBox2 окажется пустым.
---
Т. е., представленная схема весьма надёжна.
1
26.06.2011, 00:09
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.06.2011, 00:09
Привет! Вот еще темы с ответами:

Delphi чтение и запись в файл. - Delphi
Добрый день форумчане. Нужен код простейшей программы, выводящий текст из текстового файла в мемо, и обратно, то-есть: алгоритм чтения...

Чтение\запись в файл структуру - Delphi
есть код: type Files = record qu, answ: string; end; TFile = ^Files; .................................

Чтение и запись данных - Delphi
Здравствуйте, я записываю данные в файл (длинный код): vsevolod-s10.hut4.ru\открытия.txt И читаю я их таким образом:...

Запись двусвязного списка в файл и чтение - Delphi
Помогите как записывать в файл список а потом его считывать и уже работать с ним,весь форум обрыл не нашел TPElem = ^TElem; TElem...


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

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

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