Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Удаление последней строки в текстовом файле [D7, WinXP]


jiny ©   (2005-08-17 09:00:00) 

Использую для r/w AssignFile()
 assignFile(MyFile,TmpDateTitle);
 Rewrite(Myfile);
 writeln(MyFile,'text');
 closeFile(MyFile);


Причем все это создается в цикле и за раз выходит по 8-10 файлов, где постоянно нужно убирать пустую строку в конце,
т.к. файлы предназначены для переноса в 1С в виде проводок,
ERT-шник писали не мы, да и пароль на нем стоит. Если в файле осталась пустая строка импорт данных прекращается.
Как быть ?


Наиль   (2005-08-18 00:27:00) [1]

>[8]
Ошибся! Должно быть Count-1.
Но в любом случае, ты повторил метод [1], только с визуальной компанентой, что само по себе, не есть гуд.
Лучший вариант по-моему [7]. Лучше правильно записать, чем исправлять ошибки.
Мой вариант укорочения на 2 байта (для разнообразия):
Var
f:File of Byte;
begin
AssignFile(f,'1.txt'); Reset(f);
Seek(f,FileSize(f)-2);
Truncate(f);
CloseFile(f);
end;


George   (2005-08-17 23:10:00) [2]

А если через Мему?

Memo1.lines.loadfromfile(yourfilename);
memo1.lines.delete[memo1.lines.count];
memo1.lines.savetofile(yourfilename);

Вроде нихде не ошибся...


kblc   (2005-08-17 12:37:00) [3]

assignFile(MyFile,TmpDateTitle);
Rewrite(Myfile);
write(MyFile,'text');
closeFile(MyFile);


alpet   (2005-08-17 11:27:00) [4]

jiny   (17.08.05 10:30) [4]

Это означает, что после сохранения StringList - в конец файла добавляется 2 байта - CR и LF, так-что тебе остается укоротить файл на эти два байта. Но вприципе с TFileStream это выйдет конечно побыстрее и проще.


jiny   (2005-08-17 10:31:00) [5]

Leonid Troyanovsky ©   (17.08.05 10:21) [3]
спасибо, щас буду пробовать


jiny   (2005-08-17 10:30:00) [6]

Попробовал через Stringlist, все данные сначала закачал туда, а затем вызвал TmpStringFile.SaveToFile(Somefile), что самое непонятное, когда смотрю последнюю строку в стринлисте, он показывает реально последнюю строку, где нет пустой строки, но
после .SaveToFile- добавляет в конец файла пустую строку.


Leonid Troyanovsky   (2005-08-17 10:21:00) [7]


> jiny   (17.08.05 09:57) [2]
> В принципе тоже вариант, а процедура удаления напрямую из
> файла есть ?


SetFilePointer, SetEndOfFile.

Только, использовать Assign &etc смысла особого нет.
Проще TFileStream. Т.е., перемещаем на позицию (размер файла - размер буфера достаточно большого размера, куда  поместятся
все пустые строки), читаем в буфер, определяем положение #13#10 (или что там) после которого нет текста и ставим конец ;)

--
Regards, LVT.


jiny   (2005-08-17 09:57:00) [8]

В принципе тоже вариант, а процедура удаления напрямую из файла есть ?


alpet   (2005-08-17 09:23:00) [9]

Загружай файл в TStringList, потом сохраняй в новый файл все, за исключением последней строки..

var
 list: TString;
 s: string;
 t: Text;
begin
list := TStringList.Create;
try
 list.LoadFromFile (SomeFileName);
 if list.count > 0 then list.Delete (list.count - 1);
 list.SaveToFile (SomeFileName);
finally
 list.Free;
end;
end;


Наверх

Титульная страница Поиск, карта сайта Написать письмо