Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.09.11;
Скачать: CL | DM;

Вниз

Удаление последней строки в текстовом файле   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.025 c
1-1124684699
Демидрол
2005-08-22 08:24
2005.09.11
Не стандартный MainMenu


11-1106744649
chum
2005-01-26 16:04
2005.09.11
TabOrder


5-1098637694
TGCT
2004-10-24 21:08
2005.09.11
Прозрачность "TGraphicControl" компонента?


3-1122397417
pasha_golub
2005-07-26 21:03
2005.09.11
Cached updates. To be or not to be?


14-1124213133
Mike Kouzmine
2005-08-16 21:25
2005.09.11
Президент - наша гордость!