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

Вниз

как удалить текст из файла?   Найти похожие ветки 

 
sydenis   (2007-10-20 13:08) [0]

Есть файло afile:=TFileStream.Create("file.txt",fmOpenReadWrite)
Надо уменьшить его размер путём удаления текста с 20й по 30ю позиции.  Как удалить эти символы?


 
DevilDevil   (2007-10-20 13:27) [1]

1) afilepostsize := afile.Size - 30;
2) считать в память данные из файла с позиции 30, размером afilepostsize
3) записать в файл с позиции 20 из памяти, размером afilepostsize
4) afile.size := 20 + afilepostsize


 
sydenis   (2007-10-20 13:43) [2]

сэнкс
так и будем делать.  сурово аднако...
странно, что нет чего-то более человеческого типа afile.Delete(FromPos,Counter)
:((


 
Leonid Troyanovsky ©   (2007-10-20 13:53) [3]


> sydenis   (20.10.07 13:43) [2]

> странно, что нет чего-то более человеческого

Чтоб неповадно было.

--
Regards, LVT.


 
DevilDevil   (2007-10-20 14:14) [4]

> странно, что нет чего-то более человеческого типа 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) [5]

> странно, что нет чего-то более человеческого типа 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:16) [6]

1) сорри за дубль
2) правка:
Stream := TMemoryStream.Create;
// или
// Stream := TFileStream.Create(...);


 
sydenis   (2007-10-20 15:09) [7]


> Согласен!
> а так же read/write String, Int, byte, ...
можно что сделать...

наследника-то сделать можно, тока лень ради одного раза всё это городить...
а насчёт Delete(FromPos,Counter) можно ведь было бы вполне универсально сделать если Counter в байтах.   Имхо на асме такая процедура выглядела бы вполне изящно...  Сделать её виртуальной и пусть кто хочет переписывает в наследниках - чтоб вместо байтов размер хранящихся структур и т.п.  ;))


 
DevilDevil   (2007-10-20 20:45) [8]

мда...


 
Германн ©   (2007-10-21 01:39) [9]


> странно, что нет чего-то более человеческого типа afile.
> Delete(FromPos,Counter)

Ничего странного. Если речь идёт о тексте, то только идиот будет придумывать что-то, что работает (в частности удаляет) не по смыслу текста, а по порядковому номеру символа.


 
Плохиш ©   (2007-10-21 02:10) [10]


> sydenis   (20.10.07 13:43) [2]
> сэнкс
> так и будем делать.  сурово аднако...
> странно, что нет чего-то более человеческого типа afile.
> Delete(FromPos,Counter)

Советую всё-таки прочитать про устройства последовательного доступа...


 
sydenis   (2007-10-21 02:29) [11]


> Советую всё-таки прочитать про устройства последовательного
> доступа...

спасибо посмотрю,  хотя свою задачу я уже решил :)

> только идиот будет придумывать что-то, что работает не по смыслу текста

и только идиот будет делать громкие заявы на своём маленьком бытовом опыте


 
Германн ©   (2007-10-21 02:55) [12]


> sydenis   (21.10.07 02:29) [11]
>
>

Я не хотел употреблять этот термин в отношении тебя. Но ты не оставляешь мне других вариантов. Примите и прочь! :(



Страницы: 1 вся ветка

Текущий архив: 2007.11.11;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.025 c
8-1168871218
olegnik
2007-01-15 17:26
2007.11.11
сжатия изображения bitmap.


2-1192776194
ses
2007-10-19 10:43
2007.11.11
combobox. edit;


2-1192799860
Friz
2007-10-19 17:17
2007.11.11
ShellExecute


15-1191815012
TUser
2007-10-08 07:43
2007.11.11
Microsoft признает права пользователей "пираток"


11-1177177531
bessam
2007-04-21 21:45
2007.11.11
BitBtn.Enabled := False , а по виду надписи не скажешь.