Memo verisinin kendinden sonraki verilerle karşılaştırılması
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Memo verisinin kendinden sonraki verilerle karşılaştırılması
merhaba,
memo3 içerisinde aşağıdaki formatta klasör içerisinde bulunan resimlerin isim ve boyutlarını tutuyorum.
c:\fotograflar\11111111_001;567890
c:\fotograflar\11111112_001;567890
c:\fotograflar\11111115_001;567890
c:\fotograflar\11111116_001;668992
c:\fotograflar\11111117_001;668992
c:\fotograflar\11111118_001;567893
c:\fotograflar\11111119_001;567893
c:\fotograflar\11111120_001;567390
c:\fotograflar\11111122_001;567390
buarada line 1 de ; den sonraki dosya boyutu ile line2 yi karşılaştırıp (ilksatir=sonrakisatır) ikinci satırın dosya boyutu bir önceki satırla aynıysa 2nci satırındaki veriyi silmem veya bilgisini bir yerde geçici tutmam gerekiyor. sonra 1 ile 3 demem ve baktığımda birinci satır ile 4ncü farklı olduğunu göründe bu sefer 4ncü satırla sonraki satırları karşılaştırmam gerekiyor. ve en sonunda ise yapmak istediğim geçici dosyada tuttuğum filenameleri hard diskin ilgili klasöründen silmek olacak. bu konuda yardımlarını rica edeceğim.
Neticede c:\fotograflar\ klasörü altında sadece aşağıdakiler kalmış olacak.
c:\fotograflar\11111111_001
c:\fotograflar\11111116_001
c:\fotograflar\11111118_001
c:\fotograflar\11111120_001
memo3 içerisinde aşağıdaki formatta klasör içerisinde bulunan resimlerin isim ve boyutlarını tutuyorum.
c:\fotograflar\11111111_001;567890
c:\fotograflar\11111112_001;567890
c:\fotograflar\11111115_001;567890
c:\fotograflar\11111116_001;668992
c:\fotograflar\11111117_001;668992
c:\fotograflar\11111118_001;567893
c:\fotograflar\11111119_001;567893
c:\fotograflar\11111120_001;567390
c:\fotograflar\11111122_001;567390
buarada line 1 de ; den sonraki dosya boyutu ile line2 yi karşılaştırıp (ilksatir=sonrakisatır) ikinci satırın dosya boyutu bir önceki satırla aynıysa 2nci satırındaki veriyi silmem veya bilgisini bir yerde geçici tutmam gerekiyor. sonra 1 ile 3 demem ve baktığımda birinci satır ile 4ncü farklı olduğunu göründe bu sefer 4ncü satırla sonraki satırları karşılaştırmam gerekiyor. ve en sonunda ise yapmak istediğim geçici dosyada tuttuğum filenameleri hard diskin ilgili klasöründen silmek olacak. bu konuda yardımlarını rica edeceğim.
Neticede c:\fotograflar\ klasörü altında sadece aşağıdakiler kalmış olacak.
c:\fotograflar\11111111_001
c:\fotograflar\11111116_001
c:\fotograflar\11111118_001
c:\fotograflar\11111120_001
Re: Memo verisinin kendinden sonraki verilerle karşılaştırılması
Memo içine eklerken bu kontrolü yapmak bence daha kolay
There's no place like 127.0.0.1
Re: Memo verisinin kendinden sonraki verilerle karşılaştırılması
Aşağıda ki kodla c:\fotograflar klasöründeki dosya isimlerini ve dosya boyutlarını memoya listeleyebildim ama karşılaştırma işini bir türlü yapamadım. bu kodun geliştirilmesi ve clone jpg fileların memo5 de dosya adı ile listelenmesinin sağlanması için yardımınızı rica edeceğim.
Kod: Tümünü seç
procedure TForm1.BtnDosyaBoyutuBulucuClick(Sender: TObject);
var
searchResult : TSearchRec;
referansdosyaadi: string;
referansdosyaboyutu: integer;
dosyaveboyut: string;
klasoryolu: string;
toplamsatir: integer;
x,y:integer;
oncekidosyaboyutu: integer;
sonrakidosyaboyutu: integer;
begin
oncekidosyaboyutu:=0;
sonrakidosyaboyutu:=0;
toplamsatir:=0;
x:=0;
y:=0;
// Try to find regular files matching Unit1.d* in the current dir
Memo3.Lines.Clear;
Memo4.Lines.Clear;
klasoryolu:=Edit3.Text;
if findfirst(klasoryolu+'\'+'*.jpg', faAnyFile, searchResult) = 0 then
begin
repeat
Memo3.Lines.add(klasoryolu+'\'+(searchResult.Name));
Memo4.Lines.Add(InttoStr(searchResult.Size));
until FindNext(searchResult) <> 0;
// Must free up resources used by these successful finds
FindClose(searchResult);
toplamsatir:=Memo3.Lines.Count;
showmessage('Memo3 Toplam Satir Sayisi ='+ inttostr(toplamsatir));
end;
end;
Re: Memo verisinin kendinden sonraki verilerle karşılaştırılması
Bu konuya yardımcı olabilecek birileri varmı acaba. Burada takıldım kaldım ve bir türlü bu işi toparlayamadım. Yardımcı olabilirseniz çok memnun olacağım.
Re: Memo verisinin kendinden sonraki verilerle karşılaştırılması
Neden memo ya alman gerekiyor? TStringList kullan
TStringList.NameValueSeparator:= ';' ama "=" defaolt olması daha mantıklı. name ve value ile değerleri alman kolaylaşır.
iç içe dongü kur. Bu for döngülerinin öğretilmesinde anlatılır.
for I:=0 to count-1 do for J:= I +1 to Count-2......
TStringList.NameValueSeparator:= ';' ama "=" defaolt olması daha mantıklı. name ve value ile değerleri alman kolaylaşır.
iç içe dongü kur. Bu for döngülerinin öğretilmesinde anlatılır.
for I:=0 to count-1 do for J:= I +1 to Count-2......
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5
Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5
Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Re: Memo verisinin kendinden sonraki verilerle karşılaştırılması
Açıklamalı olarak aynı boyutlu olan kayıtları bulmayı yazdım. Dosya silme işlemini de siz eklersiniz.
Kod: Tümünü seç
uses
System.StrUtils;
procedure TForm3.btnSilClick(Sender: TObject);
var
n1: Integer;
vReferansBilgi, vReferansSize, vSize: string;
vPosNoktaliVirgul: Integer;
begin
mmoSilinenler.Clear;
for n1 := 0 to mmoListe.Lines.Count-1 do
begin
vReferansBilgi := mmoListe.Lines.Strings[n1]; //n1 inci satırdaki bilgiyi al
vPosNoktaliVirgul := Pos(';', vReferansBilgi)+1; //noktali virgül hangi karakterde bu bizim ayraç bilgimiz.
if n1 = 0 then
vReferansSize := MidStr(vReferansBilgi, vPosNoktaliVirgul, Length(vReferansBilgi)); //artık boyut bilgisi referans değişkenimizde
//bundan sonraki satılardan boyut bilgisini alıp bir önceki referans ile kontrol edeceğiz.
if n1 > 0 then
begin
vSize := MidStr(vReferansBilgi, vPosNoktaliVirgul, Length(vReferansBilgi)); //ilk satırdan sonraki boyut bilgisi vSize değişkenimizde
if vReferansSize = vSize then
begin
mmoSilinenler.Lines.Add(mmoListe.Lines.Strings[n1]); //boyuları aynı olan kayıtlar silinenler memoya aktarıldı.
//burada artık silinecek olan satırlar mmoSilinenler isimli memoya dolduruluyor
//buradan sonra istediğiniz işlemi yapabilirsiniz.
end
else if vReferansSize <> vSize then
begin
vReferansSize := vSize; //farklı ise referans size bilgisine eşitlendi. Her zaman vReferansSize ile karşılaştırma yapılıyor.
end;
end;
end;
end;
PostgreSQL - Delphi - Linux
Re: Memo verisinin kendinden sonraki verilerle karşılaştırılması
vReferansSize := MidStr(vReferansBilgi, vPosNoktaliVirgul, Length(vReferansBilgi)); //artık boyut bilgisi referans değişkenimizde
Midstr için undeclared identifier hatası alıyorum. daha önce bununla ilgili deklare edilen bir bildi yok diye sorun veriyor.
Midstr için undeclared identifier hatası alıyorum. daha önce bununla ilgili deklare edilen bir bildi yok diye sorun veriyor.
Re: Memo verisinin kendinden sonraki verilerle karşılaştırılması
Merhaba,3ddark yazdı: ↑06 May 2019 08:29 Açıklamalı olarak aynı boyutlu olan kayıtları bulmayı yazdım. Dosya silme işlemini de siz eklersiniz.
Kod: Tümünü seç
uses System.StrUtils; procedure TForm3.btnSilClick(Sender: TObject); var n1: Integer; vReferansBilgi, vReferansSize, vSize: string; vPosNoktaliVirgul: Integer; begin mmoSilinenler.Clear; for n1 := 0 to mmoListe.Lines.Count-1 do begin vReferansBilgi := mmoListe.Lines.Strings[n1]; //n1 inci satırdaki bilgiyi al vPosNoktaliVirgul := Pos(';', vReferansBilgi)+1; //noktali virgül hangi karakterde bu bizim ayraç bilgimiz. if n1 = 0 then vReferansSize := MidStr(vReferansBilgi, vPosNoktaliVirgul, Length(vReferansBilgi)); //artık boyut bilgisi referans değişkenimizde //bundan sonraki satılardan boyut bilgisini alıp bir önceki referans ile kontrol edeceğiz. if n1 > 0 then begin vSize := MidStr(vReferansBilgi, vPosNoktaliVirgul, Length(vReferansBilgi)); //ilk satırdan sonraki boyut bilgisi vSize değişkenimizde if vReferansSize = vSize then begin mmoSilinenler.Lines.Add(mmoListe.Lines.Strings[n1]); //boyuları aynı olan kayıtlar silinenler memoya aktarıldı. //burada artık silinecek olan satırlar mmoSilinenler isimli memoya dolduruluyor //buradan sonra istediğiniz işlemi yapabilirsiniz. end else if vReferansSize <> vSize then begin vReferansSize := vSize; //farklı ise referans size bilgisine eşitlendi. Her zaman vReferansSize ile karşılaştırma yapılıyor. end; end; end; end;
İstenileni doğru anladı isem yukarıdan aşağıya doğru seçim yapılmak isteniliyor. Yani en üstteki kalacak, altındaki aynı değere sahip olanlar silinecek. Sizin örnek kodunuz bunun tam tersini yapıyor.
Ayrıca istenilen nihai liste içinde sadece dosya adı olması, boyut ve ayraç karakteri olmaması şeklinde. Sizin örnek kodunuz dosya adı ve boyutunu olduğu gibi diğer listeye kopyalıyor.
Bilginize,
Ertan
Re: Memo verisinin kendinden sonraki verilerle karşılaştırılması
MidStr() fonksiyonu StrUtils ünitesi içindedir.
Re: Memo verisinin kendinden sonraki verilerle karşılaştırılması
Merhaba,kazimates yazdı: ↑08 Şub 2019 01:35 merhaba,
memo3 içerisinde aşağıdaki formatta klasör içerisinde bulunan resimlerin isim ve boyutlarını tutuyorum.
c:\fotograflar\11111111_001;567890
c:\fotograflar\11111112_001;567890
c:\fotograflar\11111115_001;567890
c:\fotograflar\11111116_001;668992
c:\fotograflar\11111117_001;668992
c:\fotograflar\11111118_001;567893
c:\fotograflar\11111119_001;567893
c:\fotograflar\11111120_001;567390
c:\fotograflar\11111122_001;567390
buarada line 1 de ; den sonraki dosya boyutu ile line2 yi karşılaştırıp (ilksatir=sonrakisatır) ikinci satırın dosya boyutu bir önceki satırla aynıysa 2nci satırındaki veriyi silmem veya bilgisini bir yerde geçici tutmam gerekiyor. sonra 1 ile 3 demem ve baktığımda birinci satır ile 4ncü farklı olduğunu göründe bu sefer 4ncü satırla sonraki satırları karşılaştırmam gerekiyor. ve en sonunda ise yapmak istediğim geçici dosyada tuttuğum filenameleri hard diskin ilgili klasöründen silmek olacak. bu konuda yardımlarını rica edeceğim.
Neticede c:\fotograflar\ klasörü altında sadece aşağıdakiler kalmış olacak.
c:\fotograflar\11111111_001
c:\fotograflar\11111116_001
c:\fotograflar\11111118_001
c:\fotograflar\11111120_001
Ekte Delphi 10.3.1 ile uyumlu projeyi bulabilirsiniz.
- Dosya ekleri
-
- memo filesize compare.7z
- (51.25 KiB) 125 kere indirildi