powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как сохранить текст в memo в нескольких файлах по n-строк в каждом файле?
17 сообщений из 17, страница 1 из 1
Как сохранить текст в memo в нескольких файлах по n-строк в каждом файле?
    #39281957
SDA_H
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите плиз в проге текстовый файл отчета формируется в memo1 и потом сохраняется ф файл -
Код: pascal
1.
Memo1.Lines.SaveToFile(AFile....


Как сохранить файл в нескольких файлов например по 1000 строк из memo1 на один файл???
...
Рейтинг: 0 / 0
Как сохранить текст в memo в нескольких файлах по n-строк в каждом файле?
    #39281963
Товарищ младший сержант
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SDA_H,

Перебрать исходный текст по строкам => если номер строки кратен 1000, то создать новый файл => Writeln(очередную строку)
...
Рейтинг: 0 / 0
Как сохранить текст в memo в нескольких файлах по n-строк в каждом файле?
    #39282062
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
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.
Procedure SaveLog;
Const FileLines = 1000;
      FileName = 'c:\Windows\temp\Log_%d.txt';
Var FileContent: TStringList;
    LogContent: TStrings;
    FCount, LCount: integer;
.....
  procedure FlushFile;
  begin
     if FileContent.Count <= 0 then exit;
     
     Inc( FCount );
     FileContent.SaveToFile( Format( FileName, [ FCount ] ) );
     FileContent.Clear;
  end;
begin
  LogContent := Form1.Memo1.Lines;
  FCount := 0; 

  FileContent := TStringList.Create;
  try
    for LCount := 0 to LogContent.Count-1 do begin
       if 0 = (LContent mod FileLines) then
          FlushFile;
       FileContent.Add( LogContent[ LCount ] );
    end;
    FlushFile;
  finally 
    FileContent.Destroy;
  end;
end;
...
Рейтинг: 0 / 0
Как сохранить текст в memo в нескольких файлах по n-строк в каждом файле?
    #39282069
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Небольшая правка для скорости ( хотя по большому счету пофигу: процессор все равно быстрее винчестера, если только его другие программы не сожрали )

Arioch
Код: pascal
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.
Procedure SaveLog;
Const FileLines = 1000;
      FileName = 'c:\Windows\temp\Log_%d.txt';
Var FileContent: TStringList;
    LogContent: TStrings;
    FCount, LCount: integer;
.....
  procedure FlushFile;
  begin
     if FileContent.Count <= 0 then exit;
     
     Inc( FCount );
     FileContent.SaveToFile( Format( FileName, [ FCount ] ) );
     FileContent.Clear;
  end;
begin
  LogContent := Form1.Memo1.Lines;
  FCount := 0; 

  FileContent := TStringList.Create;
  try
    FileContent.BeginUpdate;
    FileContent.Capacity := FileLines;
    for LCount := 0 to LogContent.Count-1 do begin
       if 0 = (LContent mod FileLines) then
          FlushFile;
       FileContent.Add( LogContent[ LCount ] );
    end;
    FlushFile;
  finally 
    FileContent.Destroy;
  end;
end;
...
Рейтинг: 0 / 0
Как сохранить текст в memo в нескольких файлах по n-строк в каждом файле?
    #39282091
SDA_H
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СПАСИБО!
...
Рейтинг: 0 / 0
Как сохранить текст в memo в нескольких файлах по n-строк в каждом файле?
    #39282140
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SDA_HСПАСИБО!Ладно, пожалею я тех чайников, которые забредут сюда и станут использовать эту порнографию
Код: pascal
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.
procedure SaveStrings(AStrings: TStrings; ALimit: Integer);
const 
  CFileNameFmt = 'c:\Windows\temp\Log_%d.txt';
var
  Li: Integer;
  LFile: TextFile;
  LIdx: Integer;
begin
  if ALimit <= 0 then
    ALimit := AStrings.Count;
  LIdx := 0;
  AssignFile(LFile, Format(CFileNameFmt, [LIdx]));
  Rewrite(LFile);
  for Li := 0 to AStrings.Count - 2 do begin
    Writeln(LFile, AStrings[Li]);
    if (Li + 1) mod ALimit = 0 then begin
      CloseFile(LFile);
      Inc(LIdx);
      AssignFile(LFile, Format(CFileNameFmt, [LIdx]));
      Rewrite(LFile);
    end;
  end;
  Writeln(LFile, AStrings[AStrings.Count - 1]);
  CloseFile(LFile);
end;
...
Рейтинг: 0 / 0
Как сохранить текст в memo в нескольких файлах по n-строк в каждом файле?
    #39282154
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

вместо быстрого и современного варианта вы показали медленный и устаревший

неумеющий юникодные имена также

ну... пусть будет, why not
...
Рейтинг: 0 / 0
Как сохранить текст в memo в нескольких файлах по n-строк в каждом файле?
    #39282161
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Внезапно, Microsoft .NET style!

http://docwiki.embarcadero.com/VCL/XE/en/IOUtils.TFile.CreateText
http://docwiki.embarcadero.com/VCL/XE/en/Classes.TStreamWriter

Код: pascal
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.
Procedure SaveLog;
Const FileLines = 1000;
      FileName = 'c:\Windows\temp\Log_%d.txt';
Var LogContent: TStrings;
    Writer: TTextWriter;
    FCount, LCount: integer;
begin
  LogContent := Form1.Memo1.Lines;

  FCount := 0; 
  Writer := nil;
  try
    for LCount := 0 to LogContent.Count-1 do begin

       if 0 = (LCount mod FileLines) then
          FreeAndNil( Writer );

       if nil=Writer then begin
          Inc( FCount );
          Writer := TFile.CreateText( Format( FileName, [ FCount ] ) );
       end;

       Writer.WriteLine( LogContent[ LCount ] );

    end;
  finally 
    Writer.Free;
  end;
end;
...
Рейтинг: 0 / 0
Как сохранить текст в memo в нескольких файлах по n-строк в каждом файле?
    #39282819
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochвместо быстрого и современного варианта вы показали медленный и устаревшийСмешно! Очень! Возьмите потестируйте Ваш "быстрый" вариант на миллионе другом строк
Ariochнеумеющий юникодные имена такжеАсь? Это в каком месте?
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Как сохранить текст в memo в нескольких файлах по n-строк в каждом файле?
    #39583036
Jenyok2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос в продолжение темы.
.
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
// Заполнение текстом Memo2, TextString - текст заполнения,
procedure TForm1.FillStringsMemo(TextString : String);
begin
  if (TextString <> cEmptyString) then TextString:=TimeToStr(Time) + '     ' + TextString;
  Memo2.Lines.Add(TextString);
  Memo2.Update;
  try
    Memo2.Lines.SaveToFile(MainFormSaved.LogFileName_Saved);
  except on E:Exception do
    begin
      Memo2.Lines.Add('ОШИБКА ПРИ СОХРАНЕНИИ ФАЙЛА ОТЧЕТА: ' + MainFormSaved.LogFileName_Saved);
      Memo2.Lines.Add('ОШИБКА: ' + E.Message);
      Exit;
    end;   // except
  end;   // try
end;


.
При инициализации формы TForm1 пишется LOG в Memo2, который в свою очередь пишет файл с именем MainFormSaved.LogFileName_Saved .
Примерный размер файла LOG при инициализации формы TForm1 - 19 кБайт.
.
Далее в форме идет выполнение некоторых действий, которые меняют имя LOG файла MainFormSaved.LogFileName_Saved и очищают Memo2.Clear
.
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
      Memo2.Clear;
{$IFDEF Debug_SendOtchetSVK_MPSO_MSG}
      FillStringsMemo(Format('!!! ВНИМАНИЕ !!! Программа %s запущена в ОТЛАДОЧНОМ РЕЖИМЕ', [ExtractFileName(Application.ExeName)]));
      FillStringsMemo(cEmptyString);
{$ENDIF}
// Имя LOG файла и LOG CRYPT файла для криптообработки
      MainFormSaved.LogFileName_Saved:=CheckBackSlash(MainFormSaved.LogFilePath_Saved) + CurrentDateTime;
      MainFormSaved.LogFileNameCrypt_Saved:=MainFormSaved.LogFileName_Saved + '_Crypt.log';
      MainFormSaved.LogFileName_Saved:=MainFormSaved.LogFileName_Saved + '.log';


.
НО !!!
Предыдущие данные в Memo2 до очистки, которые вроде как должны писаться в файл, исчезают.
Пишется ВСЕГО ЛИШЬ одна строка и все, т.е. НЕТ такого метода, как Flush для Memo2.Lines.SaveToFile(MainFormSaved.LogFileName_Saved);

.
Попробовал изменить алгоритм записи Memo2.Lines.SaveToFile(MainFormSaved.LogFileName_Saved); следующим образом.
.
Код: pascal
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.
// Заполнение текстом Memo2, TextString - текст заполнения,
procedure TForm1.FillStringsMemo(TextString : String);
Var
  FileContent : TStringList;
  LogContent  : TStrings;
begin
  if (TextString <> cEmptyString) then TextString:=TimeToStr(Time) + '     ' + TextString;
  Memo2.Lines.Add(TextString);
  Memo2.Update;
    LogContent:=Memo2.Lines;
    FileContent:=TStringList.Create;
    try
      try
        FileContent.BeginUpdate;
        FileContent.AddStrings(LogContent);
        FileContent.SaveToFile(MainFormSaved.LogFileName_Saved);
//        FileContent.EndUpdate;
      except on E:Exception do
        begin
          Memo2.Lines.Add('ОШИБКА ПРИ СОХРАНЕНИИ ФАЙЛА ОТЧЕТА: ' + MainFormSaved.LogFileName_Saved);
          Memo2.Lines.Add('ОШИБКА: ' + E.Message);
          FileContent.Free;
          Exit;
        end;   // except
      end;   // try
    finally
      FileContent.Free;
    end;
end;


.
Результат тот же.
.
...
Рейтинг: 0 / 0
Как сохранить текст в memo в нескольких файлах по n-строк в каждом файле?
    #39583076
Jenyok2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Jenyok2,
.
Подумал, последний вариант в таком виде точно не будет работать.
.
...
Рейтинг: 0 / 0
Как сохранить текст в memo в нескольких файлах по n-строк в каждом файле?
    #39583082
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зачем создавать дополнительный TStringList, переписывать в него Memo и сохранять в файл ?
Сразу нельзя писать Memo ?
...
Рейтинг: 0 / 0
Как сохранить текст в memo в нескольких файлах по n-строк в каждом файле?
    #39583144
Jenyok2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DimaBr,
.
Внимательно читали сообщение ?
.
Именно так и делаем, пишем напрямую Memo2.Lines.SaveToFile(MainFormSaved.LogFileName_Saved);
Но при условии, что далее в программе есть Memo2.Clear, не вся информация попадает в файл, А ТОЛЬКО одна строка ~ 100 байт, должно быть много строк ~ 19 кБайт.
.
...
Рейтинг: 0 / 0
Как сохранить текст в memo в нескольких файлах по n-строк в каждом файле?
    #39583216
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Причём здесь Memo.Clear и SaveToFile если эти операции последовательны ?
Если конечно они не дёргаются из потоков, например.
...
Рейтинг: 0 / 0
Как сохранить текст в memo в нескольких файлах по n-строк в каждом файле?
    #39583243
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jenyok2,

авторНо при условии, что далее в программе есть Memo2.Clear, не вся информация попадает в файл,

что-то у тебя не так, SaveToFile TStrings'а всегда синхронно сбрасывает весь TStrings в файл.
...
Рейтинг: 0 / 0
Как сохранить текст в memo в нескольких файлах по n-строк в каждом файле?
    #39583366
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дозапись в существующий файл
Код: pascal
1.
2.
3.
4.
5.
6.
7.
LFile := TFileStream.Create('mtfile.log', fmOpenWrite);
try
  LFile.Seek(0, soFromEnd);
  Memo2.Lines.SaveToStream(LFile);
finally
  LFile.Free;
end;
...
Рейтинг: 0 / 0
Как сохранить текст в memo в нескольких файлах по n-строк в каждом файле?
    #39583425
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jenyok2,

Поставь брекпоинт на строку
Код: pascal
1.
 Memo2.Lines.SaveToFile(MainFormSaved.LogFileName_Saved);

и после её выполнения посмотри что в файле. Заодно не выскакивает ли исключение при сохранении.

Ещё вопрос: не открыт ли ещё где-нибудь этот файл на неисключительную запись.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как сохранить текст в memo в нескольких файлах по n-строк в каждом файле?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]