Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.013 c
6-1173542908
Эва
2007-03-10 19:08
2007.11.11
Обмен данными между приложениями через IdTCPClient/Server


4-1178464604
sinus
2007-05-06 19:16
2007.11.11
Запустить программу от имени другого пользователя


15-1191811318
Slider007
2007-10-08 06:41
2007.11.11
С днем рождения ! 8 октября 2007 понедельник


15-1191589795
data
2007-10-05 17:09
2007.11.11
Сменила работу и поле деятельности. Ушла из программеров


2-1192436477
thely
2007-10-15 12:21
2007.11.11
Написание простой OCX.




   Наверх