iki parantez arasındaki ifadeyi nasıl alacam

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
deltas
Üye
Mesajlar: 358
Kayıt: 06 Mar 2004 01:08
Konum: Malatya...
İletişim:

iki parantez arasındaki ifadeyi nasıl alacam

Mesaj gönderen deltas »

S.A
Arkadaşlar şöyele bişey soracaktım. Elimde bir *.txt dosyası var ve bu dosyanın içinde (.........) şeklinde iki parantez arasında olan ifadeler var. bunları o kısımdan alıp bir listbox'a atmak istiyorum. Dosya boyutum yaklaşık olarak 50-70 Mb arasında değişiyor. bu konuda yardımcı olursanız memnun olurum.
Teşekkür ederim.
Nice İnsanlar gördüm üstünde elbise yok;
Nice elbiseler gördüm içinde insan yok.
Mysterio
Üye
Mesajlar: 44
Kayıt: 18 Eki 2006 01:42

Mesaj gönderen Mysterio »

dosyayı bir memo ile açıp (70 MB lık dosya açmadım sorun çıkarırmı bilmiyorum)

var
str1,str2:string;
i:integer;
begin
memo1.lines.loadfromfile('path\dosyaadı');
for i:=0 to memo1.lines.count-1 do
begin
str1:=Memo1.lines;
str2:=copy(str1,pos('(',str1),pos(')',str1));
end;

kod ne yapar? str1 değişkeninde ( ile başlayan karakterden ) karakterine kadar (bunlar dahil) olan kısmı str2 değişkenine aktarır.
parantezleri almaması için:

str2:=copy(str1,pos('(',str1)+1,pos(')',str1)-1);

bu kod açılan ve kapanan parantezlerin aynı satırda olması durumunda doğru çalışır. Açılan parantez ayrı satırda kapanan ayrı satırda ise kodda değişiklik yapmak gerekir
deltas
Üye
Mesajlar: 358
Kayıt: 06 Mar 2004 01:08
Konum: Malatya...
İletişim:

Mesaj gönderen deltas »

Hocam özür dilerim söylemeyi unutmuşum. pos komutu ile arama yapıyorum. Ama çok aşırı yavaş ve bilgisayarın kısa bir sürede olsa kilitlenmesine neden oluyor.
Teşekkür ederim
Nice İnsanlar gördüm üstünde elbise yok;
Nice elbiseler gördüm içinde insan yok.
Mysterio
Üye
Mesajlar: 44
Kayıt: 18 Eki 2006 01:42

Mesaj gönderen Mysterio »

Benim bilgim dahilinde bu olayı yapabileceğin en hızlı yöntem bu.
ben fi tarihinde dos ta benzeri bir olay yaptım. String içinden string arama.
her ne kadar tek karakter aramıyor idi isek te fikir vermesi açısından yazayım.

Aynı database'e dos ta clipper ile yazdığım kodla 5 harfli bir substring arama 3 saat kadar sürer iken delphide pos fonksiyonu ile yaptığım arama 1,5 dakikada sonuçlanıyordu.

pos taki takılma bilgisayarındaki bir sorundan veya başka bir programdan kaynaklanabilir.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
forumda ararsanız arkadaşların bukonuda bi yazıları vardı.
+
memo bileşeni ile bu işlemi yapmayın. memo görsel bir bileşen olduğu için hız gerektiren yerlerde (50 MB da arama yapmak gibi) Tstringlist tipinde bir değişken ile işleminizi daha hızlı yapabilirsiniz.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
t-hex
Kıdemli Üye
Mesajlar: 531
Kayıt: 18 Mar 2005 02:45
Konum: İstanbul/Antalya
İletişim:

Mesaj gönderen t-hex »

FileStream kullanarakta yapabilirsiniz. Karakter karakter okutularak bu stringler tespit edilebilir.

Örnek kod

Kod: Tümünü seç

var
  FileStream : TFileStream;
  C : Char;
  InParenthesis : Boolean;
  Str : String;
begin
  InParenthesis := False;
  Str := '';
  FileStream := TFileStream.Create('c:\test.txt',fmOpenRead);
  listbox1.Items.BeginUpdate;
  try
    while FileStream.Read(c,1) > 0 do begin
       InParenthesis := InParenthesis or (C = '(');
       if (C <> ')') and (not InParenthesis) then continue;
       if (C = ')') and (InParenthesis) then begin
         listbox1.items.add(str);
         Str:='';
         InParenthesis := False;
       end else
       if c <> '(' then
         Str := Str + c;
    end;
  finally
    FileStream.Free;
    ListBox1.Items.EndUpdate;
  end;
deltas
Üye
Mesajlar: 358
Kayıt: 06 Mar 2004 01:08
Konum: Malatya...
İletişim:

Mesaj gönderen deltas »

hepinize teşekkür ederim. t-hex hocam dediğiniz yöntem işe yaradı ve yeerince hızlıda çalıştı. Şimdide unicode olayına takıldı.
Kullandığım *.txt dosyası unicode dosyası filestream ile direk açamıyorum. bunun bir yolu varmı?
Nice İnsanlar gördüm üstünde elbise yok;
Nice elbiseler gördüm içinde insan yok.
t-hex
Kıdemli Üye
Mesajlar: 531
Kayıt: 18 Mar 2005 02:45
Konum: İstanbul/Antalya
İletişim:

Mesaj gönderen t-hex »

Delphi unicode stream yok bildiğim kadarıyla fakat internette bir sürü unicodestream bulabilirsiniz. Kod çok fazla değişmeyecektir.

Örneğin bu işinizi görebilir;
http://www.zeitungsjunge.de/delphi/unicode/

Kolay gelsin.
Cevapla