AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Textdatei > 500 MB für DB vorbereiten

Ein Thema von OG Karotte · begonnen am 2. Jan 2008 · letzter Beitrag vom 4. Jan 2008
 
OG Karotte
(Gast)

n/a Beiträge
 
#10

Re: Textdatei > 500 MB für DB vorbereiten

  Alt 3. Jan 2008, 13:10
Ok, im Anhang ein ausführlicheres Beispiel der Datensätze (Daten sind angepasst, Originaldaten kann ich leider nicht veröffentlichen).

Zu Testzwecken (ich hatte in etwa an den von HalloDu beschriebenen Ansatz gedacht, also erstmal Feldnamen holen und dann Daten zuordnen) habe ich TATStreamSearch verwendet, nur um mal einen Eindruck zubekommen wie lange das dauern könnte. Ausserdem wollte ich den jeweils kompletten Feldnamen haben und die Möglichkeit eine RegEx-Suche durchzuführen erschien mir aufgrund der gegebenen unterschiedlichen Feldnamen angebracht.

Hier der verwendete erste Versuch (angepasst aus dem o.g. TATStreamSearch-Demo):
Delphi-Quellcode:
function TfrmMain.Find(AFindFirst: Boolean):Boolean;
var
  OK: Boolean;
begin

  Result := False;

  OK := False;

  try
    if AFindFirst then
    begin
      try
        strsrch_Main.FileName := FFileName;
      except
        Application.MessageBox('Cannot open filename specified', 'Error', MB_OK or MB_ICONERROR);
        Exit;
      end;
      OK := strsrch_Main.FindFirst('(\w*): ', 0, FEncoding, FOptions);
    end
    else
    begin
      OK := strsrch_Main.FindNext;
    end;

  except
    on E: Exception do
      if E.Message <> 'then
      begin
        Application.MessageBox(PChar(E.Message), 'Search failed', MB_OK or MB_ICONERROR);
        Exit;
      end;
  end;

  if OK then
    begin
      bh_Main.SetSelection(strsrch_Main.FoundStart, strsrch_Main.FoundLength, True);
      Inc(FRecordCount);

      memUC_Main.Lines.Add(bh_Main.SelText);

      edOffset.Text := IntToStr(strsrch_Main.FoundStart);
      edCount.Text := IntToStr(FRecordCount);
      pb1.Position := strsrch_Main.FoundStart * 100 div FFileSize;
    end
  else
    Application.MessageBox('Search string not found', 'Search failed', MB_OK or MB_ICONERROR);
//
  Application.ProcessMessages;
  result := OK;
end;
Der Aufruf erfolgt durch:

Delphi-Quellcode:
procedure TfrmMain.btnUC_GetKeysClick(Sender: TObject);
var
  OK:Boolean;

begin
  FAbort := False;
  FEncoding := vencANSI;
  FOptions := [];
  FRecordCount := 0;
  Include(FOptions, asoRegEx);
  if Find(True) then
  repeat
    OK := Find(False);
  until (not OK) or FAbort;
  FAbort := False;
end;
Wie gesagt, das war erst einmal nur ein Test um ein Gefühl für die Zeit zu bekommen, die das Auslesen benötigen könnte.
Angehängte Dateien
Dateityp: txt bspds_178.txt (3,0 KB, 12x aufgerufen)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:13 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz