![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
как удалить текст из файла?
sydenis © (2007-10-20 13:08:00)Есть файло afile:=TFileStream.Create('file.txt',fmOpenReadWrite)
Надо уменьшить его размер путём удаления текста с 20й по 30ю позиции. Как удалить эти символы?
Германн (2007-10-21 02:55:00) [1]
> sydenis (21.10.07 02:29) [11]
>
>
Я не хотел употреблять этот термин в отношении тебя. Но ты не оставляешь мне других вариантов. Примите и прочь! :(
sydenis (2007-10-21 02:29:00) [2]
> Советую всё-таки прочитать про устройства последовательного
> доступа...
спасибо посмотрю, хотя свою задачу я уже решил :)
> только идиот будет придумывать что-то, что работает не по смыслу текста
и только идиот будет делать громкие заявы на своём маленьком бытовом опыте
Плохиш (2007-10-21 02:10:00) [3]
> sydenis (20.10.07 13:43) [2]
> сэнкс
> так и будем делать. сурово аднако...
> странно, что нет чего-то более человеческого типа afile.
> Delete(FromPos,Counter)
Советую всё-таки прочитать про устройства последовательного доступа...
Германн (2007-10-21 01:39:00) [4]
> странно, что нет чего-то более человеческого типа afile.
> Delete(FromPos,Counter)
Ничего странного. Если речь идёт о тексте, то только идиот будет придумывать что-то, что работает (в частности удаляет) не по смыслу текста, а по порядковому номеру символа.
DevilDevil (2007-10-20 20:45:00) [5]мда...
sydenis (2007-10-20 15:09:00) [6]
> Согласен!
> а так же read/write String, Int, byte, ...
можно что сделать...
наследника-то сделать можно, тока лень ради одного раза всё это городить...
а насчёт Delete(FromPos,Counter) можно ведь было бы вполне универсально сделать если Counter в байтах. Имхо на асме такая процедура выглядела бы вполне изящно... Сделать её виртуальной и пусть кто хочет переписывает в наследниках - чтоб вместо байтов размер хранящихся структур и т.п. ;))
DevilDevil (2007-10-20 14:16:00) [7]1) сорри за дубль
2) правка:
Stream := TMemoryStream.Create;
// или
// Stream := TFileStream.Create(...);
DevilDevil (2007-10-20 14:14:00) [8]> странно, что нет чего-то более человеческого типа afile.
> Delete(FromPos,Counter)
Согласен!
а так же read/write String, Int, byte, ...
можно что сделать...
type
TStreamEx = class(TStream)
public
procedure Delete(FromPos, Counter : int64);
procedure WriteString(const S : string);
function ReadString : string;
....
end;
procedure SomeProc(some_parameters);
var
Stream : TStreamEx;
begin
Stream := TMemoryStream.Create;
// или
// Stream := TMemoryStream.Create;
Stream.WriteString('Bla-bla-bla');
...
end;
DevilDevil (2007-10-20 14:14:00) [9]> странно, что нет чего-то более человеческого типа afile.
> Delete(FromPos,Counter)
Согласен!
а так же read/write String, Int, byte, ...
можно что сделать...
type
TStreamEx = class(TStream)
public
procedure Delete(FromPos, Counter : int64);
procedure WriteString(const S : string);
function ReadString : string;
....
end;
procedure SomeProc(some_parameters);
var
Stream : TStreamEx;
begin
Stream := TMemoryStream.Create;
// или
// Stream := TMemoryStream.Create;
Stream.WriteString('Bla-bla-bla');
...
end;
Leonid Troyanovsky (2007-10-20 13:53:00) [10]
> sydenis (20.10.07 13:43) [2]
> странно, что нет чего-то более человеческого
Чтоб неповадно было.
--
Regards, LVT.
sydenis (2007-10-20 13:43:00) [11]сэнкс
так и будем делать. сурово аднако...
странно, что нет чего-то более человеческого типа afile.Delete(FromPos,Counter)
:((
DevilDevil (2007-10-20 13:27:00) [12]1) afilepostsize := afile.Size - 30;
2) считать в память данные из файла с позиции 30, размером afilepostsize
3) записать в файл с позиции 20 из памяти, размером afilepostsize
4) afile.size := 20 + afilepostsize