![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Удаление последней строки в текстовом файле [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;