Главная страница
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.024 c
3-16977
NightCold
2003-02-17 14:59
2003.03.06
Помогите срочно!


4-17465
ers
2003-01-17 09:28
2003.03.06
Как запустить в отладочном режиме?


3-16932
Сергей
2003-02-16 01:39
2003.03.06
clientdataset


14-17284
malkolinge
2003-02-19 14:26
2003.03.06
РАбота !


1-17180
Dober_m@N
2003-02-24 05:34
2003.03.06
где ошибка при работе с dll