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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.08.2009, 17:15   #1
Virga
Пользователь
 
Регистрация: 03.08.2009
Сообщений: 13
По умолчанию Сохранить в файле слишком длинную запись

Заранее прошу прощения за дилетантский вопрос. Записи надо сохранить, а потом загрузить при следующем открытии в эту же таблицу. Пока таблица маленькая - все работает, но мне нужна огромная таблица.StringGrid (Row - 170, Col - 60.) Короче выдается ошибка "Одна или несколько строчек слишком длинные и будут удалены. Ну и, естественно, - сохраняется только часть. А потом еще Read не различает записи.
Листинг на три поля -работает - вот он:
Код:
type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    StringGrid1: TStringGrid;
    StringGrid2: TStringGrid;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
type
TMember = record
Name : string[50];
eMail : string[30];
Posts : string[30];   end;
var Members : array[1..5] of TMember;
    F : file of TMember;
    i:Integer;
begin
  AssignFile(F, 'C:\Documents and Settings\Âåðà\Ðàáî÷èé ñòîë\Members.dat');
  Rewrite(F);
  for i := 1 to 5 do
  begin

  Members[i].Name:=StringGrid1.Cells[0,i-1];
   Members[i].eMail:=StringGrid1.Cells[1,i-1];
   Members[i].Posts:=StringGrid1.Cells[2,i-1];
  
  end;
try   
for i:= 1 to 5 do
Write (F, Members[i]);  
finally    CloseFile(F);  
end; end; 


procedure TForm1.Button2Click(Sender: TObject);
type
 TMember = record
Name : string[50];
eMail : string[30];
Posts : string[30];   end;
var Member: TMember;
F : file of TMember;
i:Integer;
Members : array[1..5] of TMember;
begin

for i := 1 to 5 do
begin
 AssignFile(F,'C:\Documents and Settings\Âåðà\Ðàáî÷èé ñòîë\members.dat');
Reset(F);
Seek(F,i-1);
try

Read (F, Member);
 StringGrid2.Cells[0,i-1]:=Member.Name;
 StringGrid2.Cells[1,i-1]:=Member.eMail;
 StringGrid2.Cells[2,i-1]:=Member.Posts;
finally   CloseFile(F);  end;  end;

end;
end.
А на мое колличество полей и записей - этот же листинг - не фурычит. Может кто поможет? А? Или есть другие методы рещения моей задачи?

Последний раз редактировалось Stilet; 03.08.2009 в 17:24.
Virga вне форума Ответить с цитированием
Старый 03.08.2009, 17:27   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Короче выдается ошибка "Одна или несколько строчек слишком длинные и будут удалены.
Это при сохранении выдается? Ну замени [50] на [5000]
Или поменяй стратегию - юзай открытый String.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.08.2009, 17:31   #3
hoza_syl
Форумчанин
 
Аватар для hoza_syl
 
Регистрация: 23.05.2008
Сообщений: 219
По умолчанию

Лутше описать файл не как file of ..., а просто TextFile. Сохранять надо же простые текстовые строчки. Так будет намного проще. Если надо листинг - проси - напишу.
The Revolution is Now!
hoza_syl вне форума Ответить с цитированием
Старый 03.08.2009, 17:51   #4
Virga
Пользователь
 
Регистрация: 03.08.2009
Сообщений: 13
По умолчанию

Да нет, Нужно сохранять именно как записи, а не текст, так как надо еще дальше работать с этой таблицей и записями. Уважаемый Stilet, где поменять 50 на 5000? Извещение о том, что слишком длинная запись появляется даже при сохранении полностью пустой таблицы.
Virga вне форума Ответить с цитированием
Старый 03.08.2009, 17:57   #5
hoza_syl
Форумчанин
 
Аватар для hoza_syl
 
Регистрация: 23.05.2008
Сообщений: 219
По умолчанию

Virga, ты думаеш, что если сохранить все в текстовый файл, то потом нельзя будет загрузить это дело в записи???? С текстовыми файлами работать намного проще. Листинг не пишу - впадло зря парится (это на случай если ты не захочеш пробовать через текст) , но если все таки решишь - напишы и я за пару минут сделаю.
The Revolution is Now!
hoza_syl вне форума Ответить с цитированием
Старый 03.08.2009, 18:03   #6
Virga
Пользователь
 
Регистрация: 03.08.2009
Сообщений: 13
По умолчанию

Упрощенно говоря, эта таблица - график работы людей. Справа - человек, верхняя строчка - дата, а на пересечении - объекты на которых работают эти люди. У меня получилось написать переходы - человек-объект, объект -человек, дата-объект и так далее. Все работает, но вот только проблемка с сохранением, члишком много записей.
Virga вне форума Ответить с цитированием
Старый 03.08.2009, 18:06   #7
Virga
Пользователь
 
Регистрация: 03.08.2009
Сообщений: 13
По умолчанию

Спасибочки большое Hoza_sy, но я в текстовом тоже умею сохранять.А текстовый против вирусов плохо защищен.
Virga вне форума Ответить с цитированием
Старый 03.08.2009, 18:14   #8
hoza_syl
Форумчанин
 
Аватар для hoza_syl
 
Регистрация: 23.05.2008
Сообщений: 219
По умолчанию

Настаиваю на текстовом файле:
надо сделать файл примерно такого формата:

Name1 E-Mail1 Posts1
Name2 E-mail2 Posts2
...
...

и так дальше.

Сохраниние:

Код:
procedure TForm1.SaveRecords;
type
TMember = record
Name : string[50];
eMail : string[30];
Posts : string[30];   end;
var Members : array[1..5] of TMember; 
    F : textfile;  //Здесь изминил
    i:Integer;
begin
  AssignFile(F, 'D:\data.dat');
  Rewrite(F);

  for i := 1 to 5 do
  begin
    Members[i].Name:=StringGrid1.Cells[0,i-1];
     Members[i].eMail:=StringGrid1.Cells[1,i-1];
     Members[i].Posts:=StringGrid1.Cells[2,i-1];  
  end;

 try   
//И здесь изминил
  for i:= 1 to 5 do
    begin
      Write (F, Members[i].name);  
      Write (F, Members[i].eMail); 
      WriteLn (F, Members[i].Posts);
    end;
 finally    CloseFile(F);  
 end; 
end;
Чтение аналогичное. !!!!Главное два раза read, а третий readln - чтобы перейти на новую строчку.
The Revolution is Now!
hoza_syl вне форума Ответить с цитированием
Старый 03.08.2009, 18:17   #9
hoza_syl
Форумчанин
 
Аватар для hoza_syl
 
Регистрация: 23.05.2008
Сообщений: 219
По умолчанию

Мы вместе запостили.
Цитата:
А текстовый против вирусов плохо защищен.
))
The Revolution is Now!
hoza_syl вне форума Ответить с цитированием
Старый 03.08.2009, 18:26   #10
Virga
Пользователь
 
Регистрация: 03.08.2009
Сообщений: 13
По умолчанию

Спасибо огромное, пока замолкаю - буду ковырять твой листинг относительно своей большой таблицы. Скажу, если че выйдет. Просто на текстовом файле мы уже прогорели. У меня на работе система и каждый со своей вирусной флешкой лезет. Один раз без зарплаты остались, так вирус текстовый файл побил. Еще раз спасибки!
Virga вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сохоанить, Сохранить как, Открыть несколько элементов в одном файле Polotenchik Общие вопросы Delphi 9 01.08.2009 13:37
Как прочесть длинную строку из файла? delphyok Паскаль, Turbo Pascal, PascalABC.NET 1 13.05.2009 08:51
сохранить бинарное дерево в файле lubafffka Общие вопросы C/C++ 1 30.04.2009 21:39
Запись и Чтение Имени и пароля в текстовом файле vitamin.rulez Помощь студентам 10 22.01.2009 20:32
Как правильно сохранить настройки текста в ini файле KORN Общие вопросы Delphi 2 30.10.2007 09:14