Форум: "Основная";
Текущий архив: 2005.09.11;
Скачать: [xml.tar.bz2];
ВнизУдаление последней строки в текстовом файле Найти похожие ветки
← →
jiny (2005-08-17 09:00) [0]Использую для r/w AssignFile()
assignFile(MyFile,TmpDateTitle);
Rewrite(Myfile);
writeln(MyFile,"text");
closeFile(MyFile);
Причем все это создается в цикле и за раз выходит по 8-10 файлов, где постоянно нужно убирать пустую строку в конце,
т.к. файлы предназначены для переноса в 1С в виде проводок,
ERT-шник писали не мы, да и пароль на нем стоит. Если в файле осталась пустая строка импорт данных прекращается.
Как быть ?
← →
alpet © (2005-08-17 09:23) [1]Загружай файл в 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;
← →
jiny (2005-08-17 09:57) [2]В принципе тоже вариант, а процедура удаления напрямую из файла есть ?
← →
Leonid Troyanovsky © (2005-08-17 10:21) [3]
> jiny (17.08.05 09:57) [2]
> В принципе тоже вариант, а процедура удаления напрямую из
> файла есть ?
SetFilePointer, SetEndOfFile.
Только, использовать Assign &etc смысла особого нет.
Проще TFileStream. Т.е., перемещаем на позицию (размер файла - размер буфера достаточно большого размера, куда поместятся
все пустые строки), читаем в буфер, определяем положение #13#10 (или что там) после которого нет текста и ставим конец ;)
--
Regards, LVT.
← →
jiny (2005-08-17 10:30) [4]Попробовал через Stringlist, все данные сначала закачал туда, а затем вызвал
TmpStringFile.SaveToFile(Somefile)
, что самое непонятное, когда смотрю последнюю строку в стринлисте, он показывает реально последнюю строку, где нет пустой строки, но
после.SaveToFile
- добавляет в конец файла пустую строку.
← →
jiny (2005-08-17 10:31) [5]Leonid Troyanovsky © (17.08.05 10:21) [3]
спасибо, щас буду пробовать
← →
alpet © (2005-08-17 11:27) [6]jiny (17.08.05 10:30) [4]
Это означает, что после сохранения StringList - в конец файла добавляется 2 байта - CR и LF, так-что тебе остается укоротить файл на эти два байта. Но вприципе с TFileStream это выйдет конечно побыстрее и проще.
← →
kblc © (2005-08-17 12:37) [7]
assignFile(MyFile,TmpDateTitle);
Rewrite(Myfile);
write(MyFile,"text");
closeFile(MyFile);
← →
George © (2005-08-17 23:10) [8]А если через Мему?
Memo1.lines.loadfromfile(yourfilename);
memo1.lines.delete[memo1.lines.count];
memo1.lines.savetofile(yourfilename);
Вроде нихде не ошибся...
← →
Наиль © (2005-08-18 00:27) [9]>[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;
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.09.11;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.01 c