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

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



Память: 0.45 MB
Время: 0.012 c
1-16997
jinn
2003-02-23 15:20
2003.03.06
нахождение нужной суммы в списке чисел


3-16934
mate
2003-02-16 16:38
2003.03.06
SQL запрос


3-16897
Pk
2003-02-14 16:10
2003.03.06
Как сделать чтобы QuickReport


14-17394
Дмитрий К.К.
2003-02-19 06:12
2003.03.06
Именинники 19 февраля


3-16919
Chainik2003
2003-02-15 19:00
2003.03.06
Выборка из нескольких таблиц




   Наверх