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.
iki parantez arasındaki ifadeyi nasıl alacam
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
iki parantez arasındaki ifadeyi nasıl alacam
Nice İnsanlar gördüm üstünde elbise yok;
Nice elbiseler gördüm içinde insan yok.
Nice elbiseler gördüm içinde insan yok.
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
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
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.
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.
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.
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
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
FileStream kullanarakta yapabilirsiniz. Karakter karakter okutularak bu stringler tespit edilebilir.
Örnek kod
Ö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;
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ı?
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.
Nice elbiseler gördüm içinde insan yok.
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.
Örneğin bu işinizi görebilir;
http://www.zeitungsjunge.de/delphi/unicode/
Kolay gelsin.