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

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

как удалить текст из файла?


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


Наверх

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