Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.84/37: Рейтинг темы: голосов - 37, средняя оценка - 4.84
17 / 12 / 3
Регистрация: 30.12.2010
Сообщений: 124
1

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

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

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

Мне нужно чтобы это было через OpenDialog и SaveDialog.
Может у кого есть примеры
Заранее благодарен
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.06.2011, 22:17
Ответы с готовыми решениями:

Чтение данных из XML и запись в ListBox
Здравствуйте! Подскажите, пожалуйста, как сделать, чтобы из XML файла информация записывалась...

Чтение и запись в один файл
Телевизор Sony 20 18000 Стиральная машина Bosch 10 11000 Холодильник Indesit 10 500000...

Чтение,шифрование и запись в один файл
Пишу программу шифрующую (CryptoAPI) файл,буфер - 1 килобайт,требуется сделать так чтобы чтение и...

Чтение и запись в один и тот же файл с CreateFile
Добрый день. необходимо, чтобы можно было открыть файл, произвести из него чтение, и в процессе...

7
13104 / 5885 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
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
17 / 12 / 3
Регистрация: 30.12.2010
Сообщений: 124
25.06.2011, 22:39  [ТС] 3
спасибо,но тут возникает проблема,а как 2 сразу сохранить и еще при сохранении одного он его не сохраняет как txt,а просто неизвестный формат хотя в фильтре написано *.txt
0
13104 / 5885 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
25.06.2011, 23:04 4
Цитата Сообщение от Haifisch Посмотреть сообщение
и еще при сохранении одного он его не сохраняет как txt,а просто неизвестный формат хотя в фильтре написано *.txt
Фильтр отвечает лишь за показ списка файлов. Чтобы к имени фала дописывалось некоторое предопределённое расширение - надо для TSaveDialog задать это расширение в свойстве:
Delphi
1
SaveDialog1.DefaultExt := '.txt';
Это свойство можно задать через инспектор объектов.
Цитата Сообщение от Haifisch Посмотреть сообщение
но тут возникает проблема,а как 2 сразу сохранить
Предлагаю сохранять в разные файлы. Если сохранять в один файл - надо будет придумать способ, как отделить строки, предназначенные для разных ListBox.
2
17 / 12 / 3
Регистрация: 30.12.2010
Сообщений: 124
25.06.2011, 23:11  [ТС] 5
Спасибо,вы и так мне многое помогли,подумаю может получится,а и еще один вопрос на последок,можно код открытия в ListBox из файла
0
13104 / 5885 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
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
17 / 12 / 3
Регистрация: 30.12.2010
Сообщений: 124
26.06.2011, 00:01  [ТС] 7
Большое тебе СПАСИБО!!!!
Очень тебе благодарен!!!

---
Mawrat: Пожалуйста.
0
13104 / 5885 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.06.2011, 00:09
Помогаю со студенческими работами здесь

Чтение файла, чтение названия папки где находится файл, запись данных на PHP
Допустим у нас есть структура с папками типа Large -&gt; Vehicles -&gt; Firetruck_0 В этой папке лежит...

FileStream или чтение и запись в один и тот же файл
Из темы уже можно было понять суть проблемы - есть файл и например из центра вырезается кусок путем...

Запись и чтение объектов разных классов в один файл
Здравствуйте. Изучаю С++ по Лафоре. Дошёл до места, где объясняется, как записывать объекты разных...

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


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru