Txt de Tekrarlanmayan Kayıt

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Txt de Tekrarlanmayan Kayıt

Mesaj gönderen haydarxxx »

combobox1 içindeki veriyi txt dosyasına yazdırıyorum

Kod: Tümünü seç

combobox1.items.add(combobox1.text);
combobox1.items.savetofile('C:\OkulPersonel\web.txt');
sorunum şu txt dosyasına combobox1 deki veri için kodu çalıştırıldığında txt dosyasına combobox1 deki veriyi tekrar yazıyor buda combobox1 deki değerin txt dosyasında aynı veriden sürekli tekrarlanmasını sağlıyor.Bunu nasıl çözümleriz.ComboBox1.Items.IndexOf() konusunda arama yaptım ama bir şey bulamadım.ComboBox1 deki veriyi nasıl sorgulatarak aynı veriyi varsa tekrar o kaydı txt dosyasına kaydetmemesini nasıl sağlayabiliriz

loadfromfile ile bilgileri ComboBox1 çağırdığımda aynı veriden birden fazla geliyor. :? Teşekkürler
Kullanıcı avatarı
Trial_Cooder
Üye
Mesajlar: 236
Kayıt: 17 Nis 2006 04:44

Mesaj gönderen Trial_Cooder »

kullandığın kodu buraya yazarsan yardımcı olunabilir.
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Mesaj gönderen haydarxxx »

Kod: Tümünü seç

procedure TForm12.SpeedButton4Click(Sender: TObject);
begin
webbrowser1.navigate(combobox1.text);
combobox1.items.add(combobox1.text);
combobox1.items.savetofile('C:\OkulPersonel\web.txt');
end;
ile kayıt yapıyorum

Kod: Tümünü seç

procedure TForm12.FormCreate(Sender: TObject);
begin
combobox1.items.loadfromfile('C:\OkulPersonel\web.txt');
end;

ile yüklüyorum
Kullanıcı avatarı
Trial_Cooder
Üye
Mesajlar: 236
Kayıt: 17 Nis 2006 04:44

Mesaj gönderen Trial_Cooder »

şimdi iki farklı şey anladım.
1. combobox'da zaten olan veriyi tekrar tekrar girilebiliyor.
2. C:\OkulPersonel\web.txt'e aynı bilgiler tekrar tekrar kayıt ediliyor.

1. ComboBox'ın Veri Girişinde Filitreleme Yap.

Kod

Kod: Tümünü seç

procedure TForm12.SpeedButton4Click(Sender: TObject);
var
  st: string;
  i: integer;
  sonuc: string;
begin
  sonuc := '';
  st := ComboBox1.Text; //Aranan ComboBox1.Text
  for i := 0 to ComboBox1.items.Count - 1 do
  begin
    if pos(st, ComboBox1.items[i]) > 0 then
    begin
      Edit1.Text := copy(ComboBox1.items[i], pos(st, ComboBox1.items[i]), length(st));
      if sonuc <> '' then
        break;
    end;
  end;
  if sonuc = ComboBox1.Text then
  showmessage('Hatalı Veri Girişi!')
 else
begin
 combobox1.items.add(combobox1.text);
webbrowser1.navigate(combobox1.text);
combobox1.items.savetofile('C:\OkulPersonel\web.txt');
end;
2. C:\OkulPersonel\web.txt'i memo'ya çağır ve savetofile yaparken satır satır yap. böylece her satırdaki veriyi kontrol ettirip save yapmış olursun.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

@haydarxxx

- Yaklaşımın güzel. ComboBox içerisinde varsa ekleme demek çok makul bir yaklaşım. Bunun için IndexOf anahtarını da bulmuşsun başarılı bir çalışma olmuş. Bunun iki bilgiyi nasıl birleştireceğini aşağıda yazıyorum...

Kod: Tümünü seç

procedure TForm12.SpeedButton4Click(Sender: TObject);
begin
  WebBrowser1.Navigate( ComboBox1.text );
  If ComboBox1.Items.IndexOf( ComboBox1.text ) < 0 then begin
    ComboBox1.Items.Add( ComboBox1.text );
    Combobox1.Items.Savetofile('C:\OkulPersonel\web.txt');
  end;
end;
- Bu şekilde gereksiz yere defalarca kere WEB.TXT yazmak zorunda kalmadın. Sadece yeni site adresi ComboBox1'e eklenmişse o zaman dosyaya yazılacak, değilse yazılmayacak, sadece site browse edilecek.
Resim
Resim ....Resim
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Mesaj gönderen haydarxxx »

mrmarman hocam teşekkür ediyorum cevabınızı yeni gördüm bende şu şekilde sorunu cözmüzdüm ama uzun bir yol oldu .Memoya alıp başka bir memoda temizleyerek:D İlginize teşekkürler

Kod: Tümünü seç

procedure TForm12.SpeedButton4Click(Sender: TObject);
var
i,j :integer;
bulundu : boolean;
begin
webbrowser1.navigate(combobox1.text);
combobox1.items.add(combobox1.text);
combobox1.items.savetofile('C:\OkulPersonel\Data\web.txt'); memo1.Lines.loadfromfile('C:\OkulPersonel\Data\web.txt'); 
for i:=0 to memo1.Lines.Count-1 do// memo1 deki aynı verileri silerek memo2 ye aktarıp kayıt
  begin
  bulundu:=false;
  for j:=0 to memo2.Lines.Count-1 do
       begin
       if memo1.Lines[i]=memo2.Lines[j] then bulundu:=true;
       end;
  if bulundu=false then memo2.Lines.Add(memo1.Lines[i]);
  memo2.Lines.savetofile('C:\OkulPersonel\Data\web.txt');
  end;
end;
Cevapla