С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.81/27: Рейтинг темы: голосов - 27, средняя оценка - 4.81
Haifisch
16 / 11 / 3
Регистрация: 30.12.2010
Сообщений: 124
1

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

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

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

Мне нужно чтобы это было через OpenDialog и SaveDialog.
Может у кого есть примеры
Заранее благодарен
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.06.2011, 22:17
Ответы с готовыми решениями:

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

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

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

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

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

7
Mawrat
12834 / 5742 / 1700
Регистрация: 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
16 / 11 / 3
Регистрация: 30.12.2010
Сообщений: 124
25.06.2011, 22:39  [ТС] 3
спасибо,но тут возникает проблема,а как 2 сразу сохранить и еще при сохранении одного он его не сохраняет как txt,а просто неизвестный формат хотя в фильтре написано *.txt
0
Mawrat
12834 / 5742 / 1700
Регистрация: 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
16 / 11 / 3
Регистрация: 30.12.2010
Сообщений: 124
25.06.2011, 23:11  [ТС] 5
Спасибо,вы и так мне многое помогли,подумаю может получится,а и еще один вопрос на последок,можно код открытия в ListBox из файла
0
Mawrat
12834 / 5742 / 1700
Регистрация: 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
16 / 11 / 3
Регистрация: 30.12.2010
Сообщений: 124
26.06.2011, 00:01  [ТС] 7
Большое тебе СПАСИБО!!!!
Очень тебе благодарен!!!

---
Mawrat: Пожалуйста.
0
Mawrat
12834 / 5742 / 1700
Регистрация: 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

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

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

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


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

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

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