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

Вниз

map   Найти похожие ветки 

 
race1 ©   (2003-02-22 07:29) [0]

задача - есть большой файл и надо в этом файле некоторые строчки поправить. можно конечно и readln\writeln, но есть более изящное решение - filemaping. с самим мапингом проблем нет. получили указатель на данные. но теперь как читать файл построчно и так же какие-то строчки записывать?


 
Романов Р.В. ©   (2003-02-22 08:13) [1]

Насколько я помню эта функция возвращяет определенную строку из файла. Попробуй разобраться
MBo © (07.02.03 16:57)
Вариант для чтения единственной строки:

function GetNthLineFromEnd(const NumFromEnd:Integer;const FileName:string):string;
var
FileH: THandle;
MapH: THandle;
Size,Count: Integer;
PMap,PB: PByte;
PEnd:PChar;
begin
Assert(FileExists(FileName),"File not found!");
FileH:=FileOpen(FileName, fmOpenReadWrite);
if FileH<>INVALID_HANDLE_VALUE then begin
Size:=GetFileSize(FileH, nil);
MapH:=CreateFileMapping(FileH,nil,PAGE_READONLY,0,Size,nil);
if MapH<>0 then begin
PMap:=MapViewOfFile(MapH,FILE_MAP_READ,0,0,Size);
if PMap<>Nil then begin
PB:=PMap;
inc(PB, Size);
if PB^<>10 then
Count:=1
else
Count:=0;
repeat
Dec(PB);
if PB^=10 then
Inc(Count);
until (Count>NumFromEnd) or (PB=PMAP);
if PB<>PMap then
Inc(PB);
PEnd:=StrScan(PChar(PB),#13);
if PEnd=nil then begin
PEnd:=Pchar(PMap);
Inc(PEnd,Size);
end;
SetString(Result, PChar(PB), PEnd-PB);
UnmapViewOfFile(PMap);
end;
CloseHandle(MapH);
end;
CloseHandle(FileH);
end;
end;



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

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

Наверх




Память: 0.46 MB
Время: 0.022 c
3-16902
cat_si
2003-02-14 16:45
2003.03.06
Размер базы данных


1-17006
SergeyND
2003-02-24 23:36
2003.03.06
TRichEdit


3-16887
mate
2003-02-14 14:29
2003.03.06
Где можно скачать Update Pack 1 для Delphi 5


1-17069
Иксик
2003-02-25 15:48
2003.03.06
Запуск внешнего приложения


3-16916
Arick
2003-02-15 22:31
2003.03.06
Документация для чайников