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

Вниз

Большой текстовый файл   Найти похожие ветки 

 
ИМХО ©   (2004-07-20 16:24) [0]

Имеется большой текстовый файл (больше 1 Гб). Как работать с ним? Если загружать в TStringList, то не хватит никакой памяти.


 
Smithson ©   (2004-07-20 16:29) [1]

Загружать частями.
Например, воспользоваться File of string и циклом.


 
LM2   (2004-07-20 16:36) [2]

TFileStream


 
ЮрийК ©   (2004-07-20 16:36) [3]

Приводили уже как-то:

unit MappedFile;

interface

uses
Windows, SysUtils;

type
TMappedFile = class
private
  FHandle : DWORD;
  FMapping : DWORD;
  FSize : DWORD;
  FView : PChar;
  FActive : Boolean;
  FName : string;
  procedure SetSize(const Value : DWORD);
  procedure SetName(const Value : string);
  procedure SetActive(const Value : Boolean);
  function GetActive : Boolean;
public
  constructor Create;
  destructor Destroy; override;
  procedure Close;
  procedure Open;
  property Size : DWORD read FSize write SetSize;
  property Data : PChar read FView;
  property Active : Boolean read GetActive write SetActive;
  property Name : string read FName write SetName;
end;

implementation

constructor TMappedFile.Create;
begin
FHandle := INVALID_HANDLE_VALUE;
FName := "";
end;

destructor TMappedFile.Destroy;
begin
Close;
inherited;
end;

procedure TMappedFile.SetName(const Value : string);
begin
if Active then
  raise Exception.Create("Íåëüçÿ èçìåíèòü èìÿ!");
FName := Value;
end;

procedure TMappedFile.SetSize(const Value : DWORD);
begin
if Active then
  raise Exception.Create("Íåëüçÿ èçìåíèòü ðàçìåð!");
FSize := Value;
end;

procedure TMappedFile.SetActive(const Value : Boolean);
var
sz : DWORD;
begin
if FActive = Value then Exit;
if Value then
  begin
    FHandle := CreateFile(
      PChar(FName),
      GENERIC_READ or GENERIC_WRITE,
      FILE_SHARE_READ,
      nil,
      OPEN_EXISTING,
      FILE_FLAG_RANDOM_ACCESS,
      0);
    if FHandle = INVALID_HANDLE_VALUE then
      RaiseLastOSError;
    sz := GetFileSize(FHandle, nil);
    if FSize > sz then
      begin
        SetFilePointer(FHandle, FSize, nil, FILE_BEGIN);
        SetEndOfFile(FHandle);
        SetFilePointer(FHandle, 0, nil, FILE_BEGIN);
      end
    else
      FSize := sz;
    FMapping := CreateFileMapping(
      FHandle,
      nil,
      PAGE_READWRITE,
      0, FSize,
      nil);
    if FMapping = 0 then
      begin
        CloseHandle(FHandle);
        FHandle := INVALID_HANDLE_VALUE;
        RaiseLastOSError;
      end;
    FView := MapViewOfFile(
      FMapping,
      FILE_MAP_ALL_ACCESS,
      0, 0,
      0);
    if FView = nil then
      begin
        CloseHandle(FHandle);
        CloseHandle(FMapping);
        FHandle := INVALID_HANDLE_VALUE;
        FMapping := 0;
        RaiseLastOSError;
      end;
    FSize := GetFileSize(FHandle, nil);
  end
else
  begin
    UnmapViewOfFile(FView);
    CloseHandle(FMapping);
    CloseHandle(FHandle);
    FView := nil;
    FMapping := 0;
    FHandle := INVALID_HANDLE_VALUE;
  end;
FActive := Value;
end;

function TMappedFile.GetActive : Boolean;
begin
Result := FHandle <> INVALID_HANDLE_VALUE;
end;

procedure TMappedFile.Open;
begin
Active := True;
end;

procedure TMappedFile.Close;
begin
Active := False;
end;

end.


 
Fay ©   (2004-07-20 18:00) [4]

Знакомый код 8)



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

Форум: "Основная";
Текущий архив: 2004.08.01;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.03 c
14-1089291333
DimKa
2004-07-08 16:55
2004.08.01
В какое время вы чаще бываете на данном сайте?


9-1082561392
lub
2004-04-21 19:29
2004.08.01
Пересичение/Обидинение


14-1089347109
Knight
2004-07-09 08:25
2004.08.01
Моё, твоё, наше, ваше... пока существуют эти понятия...


1-1090308604
webpauk
2004-07-20 11:30
2004.08.01
Packed record &amp; File


14-1090078500
AlexG
2004-07-17 19:35
2004.08.01
Сертификационные экзамены Microsoft по VB, BC# и пр.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский