Text Dosya Satır Silme

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Gylnurkmz
Üye
Mesajlar: 3
Kayıt: 01 Mar 2016 12:00

Text Dosya Satır Silme

Mesaj gönderen Gylnurkmz »

Öncelikle merhaba arkadaşlar forumda ve delphide yeniyim . Bu foruma katılıp aranızda olmaktan mutluluk duyuyorum . Forumdaki ilk sorum bu
2 tane txt dosyam var , Sinif.txt ve Not.txt diye . Birden fazla bilgi içerdiği için ayraçla ayırdım bilgileri . OgrenciNo'lar birbirine eşitse ortalamayı Sınıf.txt yazdırıyorum . bu bilgileri ListBox'ta görüntülüyorum . ListBoxta seçtigim kayıdı buttona bastıgımda o ögrenciye ait bütün bilgileri her 2 txt'den silen yöntem lazım ilginiz ve yardımlarınız için şimdiden teşekkürler .

Txt'lerin Yapısı :

Sınıf.txt
Sube####OgrenciNo####Adi####Soyadi####Ogretmeni####Not.txt'den gelecek Ortalama

Not.Txt
OgrenciNo####Ders####Vize####Final

Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Re: Text Dosya Satır Silme

Mesaj gönderen Lord_Ares »

Merhaba, Bu tür işlerde txt yerine veritabanı kullanman en doğrusu olduğunu hatırlatayım. Fakat yinede txt olarak yapacaksan ve eğer seni yanlış anlamadıysam, txt dosya yerine ini dosyası kullanman sanırım daha doğru olur.

1) Programının exe dosyasının olduğu klasöre Ayarlar adında bir ini dosyası oluştur. (dilersen farklı isimde verebilirsin).
2) Formunun uses kısmına IniFiles ekle;

Aşağıdaki fonksiyon programın exesinin olduğu klasörde ayarlar ini dosyasında istediğin bir alanı okur ve okuduğu değeri geri döndürür.

Kod: Tümünü seç

/// Bu fonksiyonla değerleri okuyabilir.
Function ini_Oku(Okunacak_Alan:String):AnsiString;
var
Ini   : TINIFile;
okunan: AnsiString;
begin
    Ini := TINIFile.Create(ExtractFilePath(Application.ExeName)+'Ayarlar.INI');
    okunan:=Ini.ReadString('Sinif',Okunacak_Alan,'');
    Ini.Free;  
    Result:=okunan;
end;

//// Bu fonksiyonlada değer ekleyebilirsin
procedure iniye_ekle( Bolum,Bilgi:string );
Var
  Ini : TINIFile;
begin
  Ini := TINIFile.Create(ExtractFilePath(Application.ExeName)+'Ayarlar.INI');
    Ini.WriteString('Sınıf', Bolum ,Bilgi); /// eğer değeri silmek istersen   Ini.DeleteKey('sınıf','sınıfno') şeklinde kullanmalısın.
  Ini.Free;
end;
örnek : listboxa bir değeri okuyup eklemek
listbox1.items.add( ini_oku('sınıfno') );

ini dosyasının içi de şu şekilde
[Sınıf] //senin sınıf ini dosyasından örnek verirsek dosyanın en başında böyle yazar
sınıfno=5

yukarıdaki şekilde oluşmuş bir ini dosyasından ini_oku('sınıfno') şeklinde okursan dönen sonuç 5 olacaktır.

Okuma , yazma ve silme işlemini yapabildiğine göre kısa bir if döngüsü kullanarak okuduğun değerleri karşılaştır , sonucuna göre ister sil ister bilgi ekle
Kolay gelsin
Gylnurkmz
Üye
Mesajlar: 3
Kayıt: 01 Mar 2016 12:00

Re: Text Dosya Satır Silme

Mesaj gönderen Gylnurkmz »

Hocam öncelikle cevabınız için teşekkür ederim ama sanırım tam ifade edememiş olabilirim dedigim gibi delphiye yeni başladım affınıza sıgınıyorum. isterseniz kodlarıda paylasıyım .

örnegin , Sınıf.txt'de 1 ögrenci kaydı var . Not.txt'de o ögrenciye ait birden fazla not kaydı varsa hepsini toplayıp hesaplattırıyorum . Ben sınıf'taki tek ögrenciyi sildigimde ona girilen bütün notları'da not.txt'den silmem lazım .Şuan txt dosyalara yazmayı da , okutmayıda yapabiliyorum . Txt'de ki bilgilerim listboxa geliyor , Listboxtaki ögrenciye tıkladıgımda 2 txt'dende o ögrenciyle ilişkili ne kadar bilgi varsa sildiren yöntemi arıyorum.

Kod: Tümünü seç

 public
    { Public declarations }
    OgrNo : Array of Integer;
    Adi , Soyadi , Ogretmen , Sube , Ders : Array of String;
    Ort : Array of Double;
    Kaynak, TextSube,TextOgrNo,TextAdi,TextSoyadi,TextOgretmen,TextOrt,TextOgrNo2,TextDers,TextVize,TextFinal : String ;
    procedure SinifOku;
    Procedure OgrencininNotunuGetir(pOgrNo : Integer; Var fOrt :Double);
    procedure SinifYaz;
    procedure ListBoxDoldur;
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}


procedure TForm2.SinifOku;
var
  MyFile: Textfile;
  Text : String;
  Sayac, myPos :integer;

begin
  Sayac := 0;
  SetLength(OgrNo, Sayac);
  SetLength(Adi, Sayac);
  SetLength(Soyadi, Sayac);
  SetLength(Sube, Sayac);
  SetLength(Ogretmen, Sayac);
  SetLength(Ort, Sayac);

  AssignFile(MyFile,'E:\sinif.txt');
  Reset(MyFile);

  while not Eof(MyFile) do
  begin
    Sayac := Sayac + 1;
    ReadLn(MyFile, Text);
    Kaynak := Text ;

    SetLength(OgrNo, Sayac);
    SetLength(Adi, Sayac);
    SetLength(Soyadi, Sayac);
    SetLength(Sube, Sayac);
    SetLength(Ogretmen, Sayac);
    SetLength(Ort, Sayac);

    myPos := Pos ('####',Kaynak) ;
    TextSube := Copy (Kaynak , 1 , myPos-1) ;
    Kaynak := Copy (Kaynak , myPos+4 , Length(Kaynak) - 5);
    myPos := Pos ('####',Kaynak);
    TextOgrNo := Copy (Kaynak,1 , myPos-1) ;
    Kaynak := Copy (Kaynak , myPos+4 , Length(Kaynak) - 5);
    myPos := Pos ('####',Kaynak);
    TextAdi := Copy (Kaynak,1 , myPos-1) ;
    Kaynak := Copy (Kaynak , myPos+4 , Length(Kaynak) - 5);
    myPos := Pos ('####',Kaynak);
    TextSoyadi := Copy (Kaynak,1 , myPos-1) ;
    Kaynak := Copy (Kaynak , myPos+4 , Length(Kaynak) - 5);
    myPos := Pos ('####',Kaynak);
    TextOgretmen := Copy (Kaynak,1 , myPos-1) ;
    Kaynak := Copy (Kaynak , myPos+4 , Length(Kaynak) - 5);
    myPos := Pos ('####',Kaynak);

    OgrNo[Sayac - 1]     := StrToInt (TextOgrNo);
    Sube[Sayac - 1]      := TextSube;
    Adi[Sayac - 1]       := TextAdi;
    Soyadi[Sayac - 1]    := TextSoyadi;
    Ogretmen[Sayac - 1]  := TextOgretmen;

    OgrencininNotunuGetir(StrToInt (TextOgrNo), Ort[Sayac - 1])
  end;

  Closefile(MyFile);
end;

Procedure TForm2.OgrencininNotunuGetir(pOgrNo : Integer; Var fOrt:Double);
var
  MyFile: Textfile;
  Text : String;
  XPos, sayac :integer;
  OgrNo2 : integer;
  fVize, fFinal : double;
begin
  AssignFile(MyFile,'E:\Not.txt');
  Reset(MyFile);
  fOrt := 0;
  sayac := 0;
  while not Eof(MyFile) do
  begin
    ReadLn(MyFile, Text);
    Kaynak := Text ;
    xPos := Pos ('####',Kaynak) ;
    TextOgrNo2 := Copy (Kaynak , 1 , XPos-1) ;
    if StrtoInt(TextOgrNo2) = pOgrNo then
    begin
      sayac := sayac + 1;
      Kaynak := Copy (Kaynak , XPos+4 , Length(Kaynak) - 6);
      XPos := Pos ('####',Kaynak);
      TextDers := Copy (Kaynak,1 , XPos-1) ;
      Kaynak := Copy (Kaynak , XPos+4 , Length(Kaynak) - 6);
      XPos := Pos ('####',Kaynak);
      TextVize := Copy (Kaynak,1 , XPos-1) ;
      Kaynak := Copy (Kaynak , XPos+4 , Length(Kaynak) - 6);
      XPos := Pos ('####',Kaynak);
      TextFinal := Copy (Kaynak,1 , Length(Kaynak)) ;

      OgrNo2 := StrToInt(TextOgrNo2) ;
      Ders2  := TextDers;
      fVize  := StrToFloat(TextVize) ;
      fFinal := StrToFloat(TextFinal) ;
      fOrt   := fOrt + ( fVize * 0.40 ) + ( fFinal * 0.60 );

    end;
  end;

  if sayac > 0 then fOrt := FOrt / sayac;

  Closefile(MyFile);
end;



procedure TForm2.FormShow(Sender: TObject);
var
  i : integer;
begin
  SinifOku;
  ListBoxDoldur;
end;

procedure TForm2.Button1Click(Sender: TObject);
var
  Sayac : integer;
begin
  Sayac := Length(OgrNo) + 1;

  SetLength(OgrNo, Sayac);
  SetLength(Adi, Sayac);
  SetLength(Soyadi, Sayac);
  SetLength(Sube, Sayac);
  SetLength(Ogretmen, Sayac);
  SetLength(Ort, Sayac);

  OgrNo[Sayac - 1]     := StrToInt (Edit2.Text);
  Sube[Sayac - 1]      := Edit1.Text;
  Adi[Sayac - 1]       := Edit3.Text;
  Soyadi[Sayac - 1]    := Edit4.Text;
  Ogretmen[Sayac - 1]  := Edit5.Text;
  Ort[Sayac - 1]       := 0;
  SinifYaz;
  ListBoxDoldur;
  Edit1.Clear;
  Edit2.Clear;
  Edit3.Clear;
  Edit4.Clear;
  Edit5.Clear;

end;

procedure TForm2.SinifYaz;
var
  MyFile: Textfile;
  Text : String;
  i : integer;
begin
  AssignFile(MyFile,'E:\Sinif.txt');
  Rewrite(MyFile);
  for i := 0 to Length(OgrNo) -1 do
  begin
    Writeln(MyFile ,Sube[i] +'####'+InttoStr(OgrNo[i])+ '####'+ Adi[i]+'####'+SoyAdi[i]+'####'+Ogretmen[i]+'####'+FloattoStr(Ort[i]));
  end;
  Closefile(MyFile);
end;

procedure TForm2.NotYaz;
var
  MyFile: Textfile;
  Text : String;
begin
  AssignFile(MyFile,'E:\Not.txt');
  Append(MyFile);
  Writeln(MyFile ,Edit6.Text+'####'+Edit7.Text + '####'+ Edit8.Text+'####'+Edit9.Text);
  Closefile(MyFile);
end;

procedure TForm2.ListBoxDoldur;
Var
  i :integer;
begin
  ListBox1.Clear;
  for i:=0 to Length(OgrNo) - 1 do
  begin
    ListBox1.Items.Add(Format('%-5s%-5d%-30s%-30s%-50s%f', [Sube[i], OgrNo[i], Adi[i], Soyadi[i], Ogretmen[i], Ort[i]]));
  end;
end;

procedure TForm2.Button2Click(Sender: TObject);
begin
  NotYaz;
  SinifOku;
  ListBoxDoldur;
  Edit6.Clear;
  Edit7.Clear;
  Edit8.Clear;
  Edit9.Clear;
end;
Kullanıcı avatarı
kimimben
Üye
Mesajlar: 129
Kayıt: 28 Oca 2016 04:41
Konum: İstanbul

Re: Text Dosya Satır Silme

Mesaj gönderen kimimben »

Lord_Ares yazdı: if döngüsü
Sayın @Lord_Ares

if bir döngü ifadesi ise,for kelimesini conditional expression'dır şeklinde ifade edebilir miyiz ?
Gylnurkmz
Üye
Mesajlar: 3
Kayıt: 01 Mar 2016 12:00

Re: Text Dosya Satır Silme

Mesaj gönderen Gylnurkmz »

sınıf.txt'de dizi tanımladıgım için sil butonuna bastıgımda diziden seçili elemanı eksiltmem lazım ama koda dökemiyorum.
ikra
Üye
Mesajlar: 901
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Re: Text Dosya Satır Silme

Mesaj gönderen ikra »

kimimben yazdı:
Lord_Ares yazdı: if döngüsü
Sayın @Lord_Ares

if bir döngü ifadesi ise,for kelimesini conditional expression'dır şeklinde ifade edebilir miyiz ?
keyfi dir. dilersen kullanabilirsin.

hatta dilersen yanlis bir ifade olmus, if sarti ve for döngüsü olmasi gerekirdi. dikkatinizden kacmis sanirim. seklinde de not düsebilirsin.
Belki kendin icin kücük fakat su an'dan itibaren bilgi alma amacli bu konuya bakacak diger insanlar icin büyük bir adim atmis olacaksin.
Bu konu mesreb kategorisinde degerlendirilmeli. Anadolu'nun bazi kesimlerinde notura da deniyor.
kıdemsiz üye
Kullanıcı avatarı
kimimben
Üye
Mesajlar: 129
Kayıt: 28 Oca 2016 04:41
Konum: İstanbul

Re: Text Dosya Satır Silme

Mesaj gönderen kimimben »

Sayın @ikra
ikra yazdı: keyfi dir. dilersen kullanabilirsin.
Keyfiyet açısından değerlendirmeniz çok ilginç.Hiç keyfi açıdan bugüne kadar incelememiştim.
ikra yazdı: Bu konu mesreb kategorisinde degerlendirilmeli. Anadolu'nun bazi kesimlerinde notura da deniyor.
meşrepten kastınızı tam olarak açıklamanız mümkün müdür acaba ?
Cevapla