35 milyon satırlık text dosyada yineleme

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
tecnic
Üye
Mesajlar: 29
Kayıt: 14 Tem 2005 01:47

35 milyon satırlık text dosyada yineleme

Mesaj gönderen tecnic »

35 milyon satırlık text satırı olan bir metin dosyası var elimde ve ben elimde 55 bin satırlık farklı bitextteki satırları büyük olanın içinde aramak istiyorum

bütün satırlar 15 karakterden ve hexadeciamal içerikten oluşuyo en hızlı ve kesin çözüm ne olabilir
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7604
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Merhaba,

Ne tür bir işlem yapacaksınız? Mesela 1 nolu satırdaki kaydı büyük dosyada 555. satırda buldunuz diyelim, ne olacak? Belki ufak bir program yapılarak çözülebilir.

Kolay gelsin.
tecnic
Üye
Mesajlar: 29
Kayıt: 14 Tem 2005 01:47

Mesaj gönderen tecnic »

35 milyonda o satırları silecek
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

Şöyle bir procedure işinizi görecektir:

Kod: Tümünü seç

procedure MetniDuzenle(const aSourceTextFileName, aFindTextFileName, aTargetTextFileName: string);
var
  aSourceTextFile: TextFile;
  aTargetTextFile: TextFile;
  aList: TStringList;
  aSortedList: TStringList;
  St: string;
  I, F, aSayac: Integer;
begin
  aList := TStringList.Create;
  aSortedList := TStringList.Create;
  try
    aSortedList.Sorted := TRUE;
    aList.LoadFromFile(aFindTextFileName);
    for I := 0 to aList.Count - 1 do
      if not aSortedList.Find(aList[I], F) then aSortedList.Add(aList[I]);
    aList.Clear;

    AssignFile(aSourceTextFile, aSourceTextFileName);
    Reset(aSourceTextFile);

    AssignFile(aTargetTextFile, aTargetTextFileName);
    Rewrite(aTargetTextFile);

    aSayac := 0;
    while not Eof(aSourceTextFile) do
    begin
      Inc(aSayac);
      if aSayac mod 10000 = 0 then Sleep(1);
      Readln(aSourceTextFile, St);
      if not aSortedList.Find(St, F) then Writeln(aTargetTextFile, St);
    end;

    CloseFile(aSourceTextFile);
    CloseFile(aTargetTextFile);
  finally
    aList.Free;
    aSortedList.Free;
  end;
end;

MetniDuzenle('C:\Test1.TXT', 'C:\Test2.TXT', 'C:\Test3.TXT');
İyi çalışmalar.
Kullanıcı avatarı
mege
Admin
Mesajlar: 2360
Kayıt: 05 Şub 2004 04:32
Konum: Beşiktaş
İletişim:

Mesaj gönderen mege »

FastStrings string işleme fonksiyonu
fastStrings
FREE: A useful set of assembly optimised string manipulation routines. The most remarkable of these is without a doubt the FastReplace function. StringReplace took over 8 hours to complete multiple replacements on a 10mb string, whereas FastReplace took 0.5 seconds (yes, half of a second).
.-.-.-.-.-.-.-. ^_^
tecnic
Üye
Mesajlar: 29
Kayıt: 14 Tem 2005 01:47

Mesaj gönderen tecnic »

ikinci yöntem çok daha mantıklı ama herkese teşekkürler ikinciyi deniycem ilk yönteme benzer yöntem denediğmide çünkü o dosyanın % 2 si ne denk gelen büyüklükte bi dosyayı açarken bile sistem kasılıyodu ama herkese teşekkür ediyorum sonucu fonksiyonu deneyip buraya yazıcam
Cevapla