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

Вниз

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

 
ИМХО ©   (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;
Скачать: CL | DM;

Наверх




Память: 0.46 MB
Время: 0.033 c
3-1089363561
Vladimiruss
2004-07-09 12:59
2004.08.01
Поиск и фильтрация данных


3-1088676239
AlexanderSK
2004-07-01 14:03
2004.08.01
IB лишение пользователя прав на добавление в БД объетов


14-1089964754
}|{yk
2004-07-16 11:59
2004.08.01
До окончания кучмизма осталось меньше 120 дней


3-1089214866
Bohdan
2004-07-07 19:41
2004.08.01
выполнение запроса типа Дата в базе MSAccess


3-1088851541
DelphiNew
2004-07-03 14:45
2004.08.01
DecisionCube и дата





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