Главная страница
    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.033 c
3-1089283092
Ani
2004-07-08 14:38
2004.08.01
Как отабразить данные в Query после того я ввожу их в Table?


1-1090014902
DeOptric2
2004-07-17 01:55
2004.08.01
Цвет


8-1084254456
race1
2004-05-11 09:47
2004.08.01
wma to wav


4-1087750974
Damager
2004-06-20 21:02
2004.08.01
Открыть каталог в проводнике


3-1089294262
Falendysh
2004-07-08 17:44
2004.08.01
Проблема с Blob --> Jpeg





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