Главная страница
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.02 c
3-16909
nkrainev
2003-02-14 22:05
2003.03.06
Повтор вопроса - как выполнить запросы без ошибок?


14-17373
Sergey-ZZZ
2003-02-18 17:06
2003.03.06
Help for Delphi5


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


14-17258
rewwer
2003-02-13 22:57
2003.03.06
С чего начать?


7-17416
Big_Rom
2003-01-09 07:57
2003.03.06
вопрос по принтеру lx300