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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.04.2012, 20:39   #1
flouwjke
Пользователь
 
Регистрация: 09.02.2012
Сообщений: 26
Восклицание Чтение и запись нескольких Memo в txt

Нашел такой вот код под листбоксы....
Код:
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;
  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;
Попробовал переделать под мемки...

Код:
procedure TForm4.Button2Click(Sender: TObject);
var
  Sd : TSaveDialog;
  i, Res : Integer;
  S : String;
  Fs : TFileStream;
  Mo : TMemo;
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 TMemo) then Continue;
    Mo := Self.Components[i] as TMemo;
    S := '----------' + Mo.Name + #13#10;
    Fs.Write(Pointer(S)^, Length(S));
    Mo.Items.SaveToStream(Fs);
  end;
 
  Fs.Free;
end;
 
procedure TForm4.Button3Click(Sender: TObject);
var
  F : TextFile;
  S, Name : String;
  i, Len : Integer;
  Mo : TMemo;
  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 TMemo) then Continue;
    Mo := Self.Components[i] as TMemo;
    Mo.Clear;
  end;
 
 
  AssignFile(F, Od.FileName);
  Reset(F);
 
  Mo := Memo1;
  while not Eof(F) do begin
    Readln(F, S);
    if Copy(S, 1, 10) = '----------' then begin
      Len := Length(S);
      Name := Copy(S, 11, Len - 10);
      Mo := TMemo( Self.FindComponent(Name) );
      Continue;
    end;
    if Mo <> nil then Mo.Items.Add(S);
  end;
 
  CloseFile(F);
end;
 
end.
Должен сохранять как

Код:
----------ListBox1
LB1, Строка 1.
LB1, Строка 2.
LB1, Строка 3.
----------ListBox2
LB2, Строка 1.
LB2, Строка 2.
LB2, Строка 3.
----------ListBox3
LB3, Строка 1.
LB3, Строка 2.
LB3, Строка 3.
У мну же получается

Код:
----------Memo1
мемо1----------Memo2
мемо2----------Memo3
мемо3----------Memo4
мемо4----------Memo5
мемо6----------Memo6
мемо7----------Memo7
мемо5----------Memo8
мемо8----------Memo9
мемо9----------Memo10
мемо10
при чтении из файла он весь фаил запихивает в Memo1
flouwjke вне форума Ответить с цитированием
Старый 28.04.2012, 11:57   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

давайте начнём сначала:

что у Вас дано, и, главное, ЧТО Вы хотите получить в результате?!


а пытаться по коду понять, что именно вы пытаетесь сделать - это дело неблагодарное...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 29.04.2012, 16:54   #3
flouwjke
Пользователь
 
Регистрация: 09.02.2012
Сообщений: 26
По умолчанию

В принципе разодрался сам тока 1 баг остался Када обратно из файла достаю значения он достает всю строку с переходом на новую и поэтому в каждой мемке лишний ентер в конце

Код:
procedure TForm4.Button2Click(Sender: TObject);
var
  Sd : TSaveDialog;
  i, Res : Integer;
  S : String;
  Fs : TFileStream;
  Mo : TMemo;
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 TMemo) then Continue;
    Mo := Self.Components[i] as TMemo;
    S := #13#10 + '----------' + Mo.Name + #13#10;
    Fs.Write(Pointer(S)^, Length(S));
    Mo.Lines.SaveToStream(Fs);
  end;

  Fs.Free;
end;

procedure TForm4.Button3Click(Sender: TObject);
var
  F : TextFile;
  S, Name : String;
  i, Len : Integer;
  Mo : TMemo;
  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 TMemo) then Continue;
    Mo := Self.Components[i] as TMemo;
    Mo.Clear;
  end;


  AssignFile(F, Od.FileName);
  Reset(F);

  //Mo := Memo1;
  while not Eof(F) do begin
    Readln(F, S);
    if Copy(S, 1, 10) = '----------' then begin
      Len := Length(S);
      Name := Copy(S, 11, Len - 10);
      Mo := TMemo( Self.FindComponent(Name) );
      Continue;
    end;
    if Mo <> nil then Mo.Lines.Add(S);
  end;

  CloseFile(F);
end;
flouwjke вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Импорт нескольких txt файлов макросом Snekich Microsoft Office Excel 25 06.03.2013 15:42
Текст из нескольких txt файлов Federal Помощь студентам 6 28.12.2010 18:34
Чтение из txt. Даниил_глазко JavaScript, Ajax 1 20.12.2010 10:02
Создание сразу нескольких txt файлов Nice42ru Помощь студентам 11 11.02.2010 18:35
fstream, чтение и запись .txt willfogg Помощь студентам 0 26.04.2009 18:26