Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.11.11;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.059 c
15-1191397317
jack128_
2007-10-03 11:41
2007.11.11
news группа interbase.ibexpert.ru - не удалось соедениться с


15-1191265598
TopoR
2007-10-01 23:06
2007.11.11
2 задачи в Delphi...


6-1173167422
dron9205
2007-03-06 10:50
2007.11.11
Передача информации через com-порт


2-1192706459
apic
2007-10-18 15:20
2007.11.11
Курсор


6-1172071681
alexm_hs
2007-02-21 18:28
2007.11.11
Пинг UDP-порта





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский